Wie kann Hygiene, die einfachen Anführungszeichen entgeht, durch SQL Injection in SQL Server besiegt werden?

Starten, ausschalten, ich bin mir bewusst, dass parametrisierte Abfragen sind die beste option, aber ich Frage, was macht die Strategie, die ich im folgenden präsentieren anfällig. Leute, die darauf bestehen, die unterhalb Lösung nicht funktioniert, so dass ich am schauen für ein Beispiel, warum es würde nicht.

Wenn dynamische SQL-gebaut wird im code über die folgenden Flucht, bevor Sie gesendet werden, um einen SQL-Server, welche Art von Injektion Sie besiegen kann?

string userInput= "N'" + userInput.Replace("'", "''") + "'"

Eine ähnliche Frage wurde beantwortet hieraber ich glaube nicht, dass jeder der Antworten sind hier anwendbar.

Flucht das einfache Anführungszeichen mit einem "\" ist nicht möglich, in SQL Server.

Ich glaube SQL Schmuggel mit Unicode (skizziert hier), würde konterkariert werden durch die Tatsache, dass die Zeichenfolge, die produziert wird, der markiert ist als Unicode, die von dem N vor dem Apostroph. Soweit ich weiß, gibt es keine andere Zeichensätze, dass der SQL-Server würde automatisch übersetzen, um ein einziges Zitat. Ohne ein unescaped einzige Zitat, ich glaube nicht, dass die Injektion ist möglich.

Ich glaube nicht, dass String Abschneiden ist eine praktikable Vektor. SQL Server sicherlich nicht tun werden die abgeschnitten, da die max Größe für ein nvarchar 2 GB laut microsoft. Eine 2-GB-string ist nicht machbar in den meisten Situationen, und unmöglich in meiner.

Zweiter Ordnung Injektion könnte möglich sein, aber ist es möglich, wenn:

  1. Alle Daten gehen in die Datenbank bereinigt mithilfe der oben beschriebenen Methode
  2. Werte aus der Datenbank sind nie angehängt, die in der dynamischen SQL (warum würden Sie jemals tun, anyways, wenn man nur auf die Tabelle mit dem Wert in der statische Teil dynamischer SQL-string?).

Ich bin nicht was darauf hindeutet, dass dies besser ist, oder als eine alternative zur Verwendung von parametrisierten Abfragen, aber ich möchte wissen, wie das, was ich dargelegt ist anfällig. Irgendwelche Ideen?

InformationsquelleAutor der Frage GBleaney | 2013-03-21

Schreibe einen Kommentar