Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in PHP-Funktionen zur Verhinderung von SQL-Injection

Einführung in PHP-Funktionen zur Verhinderung von SQL-Injection

高洛峰
高洛峰Original
2016-11-29 15:25:181776Durchsuche

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_string

Diese 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.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn