Mit zitieren Trennzeichen in der SQL SELECT-Anweisung für die Flucht in einfache Anführungszeichen
Ich will zu entkommen, single quote, wenn der Benutzer eine Eingabe von text wie "Sam' s Projekt, deliverable" in einer form Eintritt, entwickelt in C# (.NET). Datenbank ist ORACLE 10g.
Stieß ich auf Zitieren Trennzeichen feature von ORACLE 10g http://www.orafaq.com/wiki/SQL_FAQ#How_does_one_escape_special_characters_when_writing_SQL_queries.3F aber ich bin nicht sicher, ob mit so einem Zitat Trennzeichen q'[ text mit einfachen Anführungszeichen]' als Teil einer SELECT-Anweisung würde verhindern, dass SQL-Injection-Angriffe?
Beispiel für die Verwendung der quote-Trennzeichen q'[ text mit einfachen Anführungszeichen ]':
SQL> SELECT q'[Frank's Oracle site]' AS text FROM DUAL;
TEXT
-------------------
Frank's Oracle site
SQL> SELECT q'[A 'quoted' word.]' AS text FROM DUAL;
TEXT
----------------
A 'quoted' word.
SQL> SELECT q'[A ''double quoted'' word.]' AS text FROM DUAL;
TEXT
-------------------------
A ''double quoted'' word.
- und dein problem ist...?
- stackoverflow.com/questions/5468425/... Ihnen zu helfen.
- Sorry Marc, gab es einige Fehler bei der Veröffentlichung der Frage. Jetzt ist mein Beitrag sollte erklären, mein problem/Frage
- Es wird nicht verhindern, dass die Injektion. Es wird wahrscheinlich verlangsamen halbherzige versuche, weil die Angreifer davon aus, dass die Trennzeichen am Ende ist
'
und bekommen nirgends. Aber ein Profi wird nicht aufhören, es und mit brute-force-Sie können brechen das Zitat wörtliche leicht genug. - Nein, dies wird nicht verhindern, dass-injection-Angriffe. Die EINZIGE Sache, die verhindern, dass-injection-Angriffe ist NIE gebaut werden dynamische SQL-Anweisungen mit der vom Benutzer eingegebenen Daten direkt in die SQL-text; D. H. Sie haben IMMER Zugriff auf die vom Benutzer eingegebenen Daten durch Parameter Marker. ALL-WEISE!!!
- Beispiele bitte?
- Hier ist ein Beispiel für sql-injection mit
--
statt'
- Danke!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihre Abfrage sieht etwas so aus...
... und der user gibt etwas in dieser Art...
... Sie haben eine erfolgreiche Injektion.
Es nicht egal, welches Trennzeichen Sie verwenden, mit der
q
- ein entschlossener Angreifer wird versuchen, Sie alle. Prepared statements sind Ihre beste Verteidigung.Versuchen Sie ersetzen alle single-quotes mit 2 einfachen Anführungszeichen vor dem ausführen der SQL. d.h. ersetzen Sie " mit " vor dem ausführen der SQL-Befehl.
In C#: