Ich benutze Pymssql zum Aktualisieren, Löschen und Hinzufügen von Spalten zu einem MS SQL-Server. Die Spalten sind leider Variablen, die von externen Quellen gesetzt werden, wie z. B. Lesen der Datenbank, Lesen aus einer anderen Datenbank. Jetzt versuche ich zu verhindern, dass "bad" sql durchkommt, da ich nicht genau weiß, was die andere Datenbank mir gibt.Der beste Weg zu verhindern, SQL "Injektion" bei Verwendung der Spalte als Variable
'ALTER TABLE tablenameA ADD [' + columnname + '] varchar(25) NULL'
'ALTER TABLE tablenameA DROP COLUMN ['+columnname+']'
('UPDATE tablenameA SET [' + columnname + ']=%s WHERE id = 2', value)
Jetzt kann ich nicht eine weiße Liste verwenden, wie ich weiß nicht, welche Spaltennamen hinzugefügt werden soll, meine einzige andere Möglichkeit ich denken kann, ist eine schwarze Liste zu verwenden, aber ich frage mich, ob es vielleicht existiert eine dritte Option.
Sie könnten ['QUOTENAME'] verwenden (https://msdn.microsoft.com/en-us/library/ms176114.aspx) –
Aus derselben' QUOTENAME' Dokumentation: * Liefert eine ** Unicode Zeichenkette ** Mit den Trennzeichen, die hinzugefügt wurden, um die Eingabezeichenfolge zu einer gültigen SQL Server-Begrenzungs-ID zu machen. * Eine Zeichenfolge wird hier immer noch nicht ausgeführt, da sie keine vollständige SQL-Anweisung erstellt. –
Würde die Datenbank einmal mit 'SELECT QUOTENAME (% s)' abfragen, dann interpoliere das in die Abfrage do ...? – deceze