2011-01-05 1 views
2

Hallo Ich arbeite seit einiger Zeit mit PHP und MySQL. Jetzt arbeite ich in einer PHP-Informix- und PHP-Oracle-Umgebung. Ich habe immer mysql_real_escape_string für die Daten verwendet, die in die Datenbank gehen. Ich arbeite derzeit an Informix- und Oracle-Datenbankservern und kenne keine Escape-Funktionen für Datenbanken, die über Treiber wie OCI8 oder ODBC angeschlossen werden sollen.Sanitization gegen SQL Injection für die Eingabe in eine Oracle-Datenbank

Kann jemand etwas über die Sicherheitsmaßnahmen für diese Datenbanken erklären.

+0

Also, Sie haben es immer falsch gemacht :) Nur Strings sollten entgangen werden. Für die Zahlen hilft es nichts –

+0

Sie wären überrascht, wie unheimlich einige SQL-Injektionen sein können! –

Antwort

6

Führen Sie keine Bereinigung durch, es sei denn, Sie führen SEHR dynamische Abfragen durch. Parametrisierte Abfragen sind die richtige Weg zu gehen. Here's the PHP Documentation beschreibt, wie dies zu tun ist.

+1

+1 I für parametrisierte Abfragen. – Jeremy

+0

Ich kann nicht einmal an eine "sehr dynamische" Situation denken, wo Sie es tun müssten. Wenn Sie zulassen, dass der Benutzer einen Teil des SQL-Codes eingeben kann, sollte er ein vertrauenswürdiger Benutzer sein. – JOTN

2

Ja, Oracle hat Bind-Variablen, die automatisch die sql-Injektion verhindern. Ordentlich, nicht wahr? :) Adam Hawkes verwendet die PDO-Bibliothek. Ich persönlich benutze oci8 mit der oci_bind_by_name Funktion.

+0

Eigentlich weiß ich * kein * PHP! Ich kenne * andere * Leute, die die PDO-Bibliothek benutzen. Es ist nicht spezifisch für OCI, also können Sie, sobald Sie es mit einer vertrauten DB verwendet haben, zu einer anderen DB wechseln, ohne alles neu zu lernen. Ich höre auch gute Dinge über oci_bind_by_name. –

+0

Ich denke, wenn Ihre Bindevariable ein einzelnes '(' darin enthält, dann wird die Abfrage fehlschlagen. –