Wie konvertiere ich einen string in die sichere SQL-String?
Ich bin generieren einige sql-insert-Anweisungen aus einer Reihe von text-Dateien.
Diese text-Dateien sind in der Regel Benutzer eingegebenen Daten. Ich möchte zur Bereinigung dieser Daten, so dass es nicht zur Pause gehen die insert-Anweisung.
Zum Beispiel, einige der input-Daten verwendeten die Menschen das Wort nicht. Die "'" don T führen Sie die sql-Anweisung zu denken, der string beendet hat und somit einen Fehler verursachen.
Ist es .NETTO-Methode, die ich anrufen kann um zu konvertieren alle diese Zeichen, um entweder die escape-codes oder sichere Zeichen?
mögliche Duplikate von Schaffung eines sicheren SQL-Anweisungen als Zeichenfolgen
Verwendung von parametrisierten Abfragen (siehe verlinkten Frage).
Die Antwort gibt es, sagt die Eingabe der Daten in die Parameter. Ich bin einfach zu erzeugen versuchen, das script mit der Suche in text-Dateien. Mein Programm ist eigentlich nicht nennen werde die Datenbank spuckte den scripts.
Nicht sicher, wie Ihre Antwort-Adressen der Empfehlung, dass Sie der Verwendung von parametrisierten Abfragen. Die Skripts, die Sie generieren würde einfach werden, Skripts, die Verwendung von parametrisierten Abfragen-Sie haben tatsächlich nicht zum Aufruf der Datenbank.
werden Skripte, die Verwendung von parametrisierten Abfragen" - wie? Was macht ein
Verwendung von parametrisierten Abfragen (siehe verlinkten Frage).
Die Antwort gibt es, sagt die Eingabe der Daten in die Parameter. Ich bin einfach zu erzeugen versuchen, das script mit der Suche in text-Dateien. Mein Programm ist eigentlich nicht nennen werde die Datenbank spuckte den scripts.
Nicht sicher, wie Ihre Antwort-Adressen der Empfehlung, dass Sie der Verwendung von parametrisierten Abfragen. Die Skripts, die Sie generieren würde einfach werden, Skripts, die Verwendung von parametrisierten Abfragen-Sie haben tatsächlich nicht zum Aufruf der Datenbank.
werden Skripte, die Verwendung von parametrisierten Abfragen" - wie? Was macht ein
.sql
script-Datei sieht wie mit parametrisierten Abfragen? Wäre nicht die parameter-Werte haben werden, entkommen Sie wieder, wenn Sie geschrieben sind, in die Datei?InformationsquelleAutor Diskdrive | 2011-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht bereinigen Ihre Saiten. Verwendung von parametrisierten Abfragen statt, wie Sie behandeln alle Bereinigung.
Brauchen Sie nicht angeben, welche Datenbank Sie verwenden, so nehme ich an, es ist MS-SQL-Server. Microsoft hat einen Artikel auf der offiziellen ASP.net Webseite über diese. Siehe auch MSDN für SqlCommand.Parameter und die AddWithValue Methode.
Parametrisierte Abfragen sind nur eine Teillösung. Sie nicht den Schutz vor SQL-Injektion in einem dynamischen SQL-query, javascript-Injektion in ein varchar-Feld, - parameter, - Injektion in ein html-label, etc. Es gibt keine "silver bullet" - Lösung zur Injektion.
Das ist ein anderes problem ist allerdings: Parametrisierte Abfragen bieten 100% Schutz vor SQL-Injection, das ist "Injektion unerwünschte SQL in eine andere SQL-Anweisung". Die andere Seite ist die Ausgabe-Kodierung, aka. HTML-Codierung alle Benutzer-Daten, die Ausgabe in eine Webseite um zu verhindern, dass Sachen wie XSS. Das ist ein ganz anderes problem, eines, das viel schwerer ist. Ich bin mir nicht sicher, was du meinst mit "dynamischen SQL-Abfrage" - auch wenn Sie eine Abfrage erstellen mit StringBuilders können Sie ganz einfach fügen Sie Parameter hinzu? (Parametrisierte Abfragen werden NICHT gespeichert Prozeduren nach alle, Sie können dynamisch erzeugt werden)
Siehe dieses Beispiel, wie dynamisches SQL ermöglicht SQL-Injection, auch wenn Sie verwenden ein .NET parametrisierte Abfrage
Ich habe gedacht, ein bisschen mehr und ich Stimme zu, Sie sollten überprüfen Sie die Zeichenfolge für XSS und speichern Sie es dann, wenn es sicher ist. Das heißt, validieren, aber nicht desinfizieren. Lassen Sie einen Rahmen, desinfizieren Sie die Zeichenfolge für Sie.
InformationsquelleAutor Michael Stum
Es ist nur ein einzelnes Zeichen, das Sie haben, zu entkommen: ansi 0x27, aka die einzigen, Zitat:
insert
Aussage aber. Wenn Sie generieren ein string wie dieserINSERT INTO T1(numeric,string) values (1,'some string')
dann wird es nicht helfen, wenn Sie haben einige unerwartet schlechte Daten in der ersten Spalte. (z.B.'1,2); DROP TABLE ...'
Dann mit int.TryParse für den ersten parameter, um sicherzustellen, seine eine saubere integer.
Was ist mit den Kommas in einer insert-Anweisung?
Dies ist genug für mich. Ich habe es in meinem micro-ORM (EntityLite) für sehr große
IN
Prädikate, die zur Umgehung der 2100 SQL Server-maximale Anzahl von Parametern. Ich hoffe, es gibt keine Zeichen mehr zu kümmern. Ich glaube, ich war zu sehr paranoid mit SQL-injection.ein Komma innerhalb der einzelnen Angebote sollte ein problem nicht verursachen. Aber wenn es geschah, wo Sie nicht erwartet einen string und dann die andere Bemerkung über die TryParse-für einen numerischen Wert, würde es kümmern
InformationsquelleAutor Andomar