Heim > Artikel > Backend-Entwicklung > Einführung in PHP-Funktionen zur Verhinderung von SQL-Injection
Vor ein paar Tagen wurde die Website injiziert. Jetzt stelle ich Ihnen mehrere integrierte Verarbeitungsfunktionen von PHP vor, um die SQL-Injection zu verhindern. Zu den MySQL-Operationsfunktionen von PHP gehören beispielsweise addslashes(), mysql_real_escape_string(), mysql_escape_string(. ) Wartefunktionen
Spezifische Verwendung: Addslashes zur Verhinderung der SQL-Injection
Obwohl sich viele inländische PHP-Programmierer immer noch auf Addslashes zur Verhinderung der SQL-Injection verlassen, wird jedem empfohlen, die Prüfung zu verstärken, um die SQL-Injection zu verhindern Chinesisch. Das Problem mit Addslashes besteht darin, dass Hacker 0xbf27 verwenden können, um einfache Anführungszeichen zu ersetzen, während Addslashes nur 0xbf27 in 0xbf5c27 ändern, was zu einem gültigen Multibyte-Zeichen wird, sodass Addslashes nicht erfolgreich abgefangen werden können.
Addslashes ist natürlich nicht nutzlos. Für die Verarbeitung von Einzelbyte-Zeichenfolgen verwenden Sie mysql_real_escape_string.
Außerdem gilt für das Beispiel von get_magic_quotes_gpc im PHP-Handbuch das Code wie folgt:
function post_check($post)
{ _quotes_gpc ist geöffnet 🎜> $ post = str_replace("_", "_ " , $post); // '_' herausfiltern
$post = str_replace("%", "%", $post); // Herausfiltern > $ zurückgeben post;
function inject_check($sql_str) { { return eregi('select|insert|update|delete|'| function verify_id($id= null) { if (!$id) { exit('Keine Parameter übermittelt! '); } // Beurteilung, ob es leer ist oder nicht elseif (inject_check($id)) { exit('Der übermittelte Parameter ist illegal!' } // Injektionsbeurteilung elseif (! is_numeric($id)) { exit('Der übermittelte Parameter ist illegal!'); } // Numerisches Urteil Sonderzeichen werden unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung maskiert und sind daher sicher zur Verwendung mit mysql_query().Hinweis: mysql_real_escape_string() maskiert % und _ nicht.mysql_real_escape_string, Beispiel#1 mysql_real_escape_string () Beispiel, der Code lautet wie folgt:& lt;? PHP
$ item = "zaks und dericks Laptop"; escapd_item = MySQL_Real_escape_String ($ item ); printf ( "Escaped string: %sn" , $escaped_item ); ?> //Das obige Beispiel erzeugt die folgende Ausgabe: //Escape-Zeichenfolge : Zaks und Dericks Laptop mysql_escape_stringDiese Funktion maskiert unescaped_string, damit sie sicher in mysql_query () verwendet werden kann.
Hinweis: mysql_escape_string() maskiert % und _ nicht. Diese Funktion ist genau die gleiche wie mysql_real_escape_string(), außer dass mysql_real_escape_string() ein Verbindungshandle akzeptiert und die Zeichenfolge entsprechend dem aktuellen Zeichensatz überträgt. mysql_escape_string() akzeptiert keine Verbindungsparameter und kümmert sich nicht um die aktuelle Zeichensatzeinstellung
Beispiel 1. mysql_escape_string() Beispiel, der Code lautet wie folgt:
$item = "Zaks Laptop";
$escaped_item = mysql_escape_string($item);
printf ("Escaped string: %sn", $escaped_item); >
? > //Ausgabe: //Escaped string: Zaks Laptop Der Unterschied zwischen den beiden Funktionen mysql_real_escape_string: mysql_real_escape_string muss in (PHP 4 >= 4.3.0, PHP 5) sein, andernfalls können Sie nur mysql_escape_string verwenden. Der Unterschied zwischen den beiden ist: mysql_real_escape_string berücksichtigt den aktuellen Zeichensatz der Verbindung, während mysql_escape_string dies nicht tut . Wir können Urteilsvermögen verwenden, um umfassend zu verarbeiten. Der Code lautet wie folgt: function cleanuserinput($dirty){ if (get_magic_quotes_gpc()) {$clean = mysql_real_escape_string(stripslashes ($dirty)); }else{ $clean = mysql_real_escape_string($dirty); } return $clean;
} Zusammenfassend: * addslashes() ist ein erzwungener Zusatz; * mysql_real_escape_string() bestimmt den Zeichensatz, es gibt jedoch Anforderungen für die PHP-Version; * mysql_escape_string berücksichtigt nicht den aktuellen Zeichensatz der Verbindung.