Heim  >  Artikel  >  Backend-Entwicklung  >  Ich suche eine ausführliche Erklärung der Anti-Injektion von mysql_real_escape_string()

Ich suche eine ausführliche Erklärung der Anti-Injektion von mysql_real_escape_string()

WBOY
WBOYOriginal
2016-08-04 09:20:561413Durchsuche

mysql_real_escape_string() gilt als eine gute Alternative zu addslashes() und mysql_escape_string(), die Wide-Byte- und Injektionsprobleme lösen kann, aber die offizielle Beschreibung ist unklar:

Ich suche eine ausführliche Erklärung der Anti-Injektion von mysql_real_escape_string()

mysql_real_escape_string – Escape-Sonderzeichen in einer Zeichenfolge, die in einer SQL-Anweisung verwendet wird, unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung

Ich verstehe diesen Satz wirklich nicht, wenn man bedenkt, was der aktuelle Zeichensatz der Verbindung bedeutet. Danke!

Referenz:
http://php.net/manual/zh/function.mysql-real-escape-string.php
http://www.cnblogs.com/suihui/archive/2012/ 20.09.2694751.html
http://www.neatstudio.com/show-963-1.shtml

Zusätzliche Fragen: @佢作作作
1. Der hinzugefügte Inhalt wird nicht an MySQL übertragen. Wenn also ' or 1=1;-- s injiziert wird, wird der hier injizierte Inhalt dann nicht schließlich zur Ausführung an MySQL übertragen? 🎜>Referenz: https://segmentfault.com/q/1010000005994443

2.

Was bedeutet das? Den Zeichensatz der aktuellen Verbindung ändern?并考虑到连接的当前字符集

Antwortinhalt:

mysql_real_escape_string() gilt als eine gute Alternative zu addslashes() und mysql_escape_string(), die Wide-Byte- und Injektionsprobleme lösen kann, aber die offizielle Beschreibung ist unklar:

Ich suche eine ausführliche Erklärung der Anti-Injektion von mysql_real_escape_string()

mysql_real_escape_string – Escape-Sonderzeichen in einer Zeichenfolge, die in einer SQL-Anweisung verwendet wird, unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung

Ich verstehe diesen Satz wirklich nicht, wenn man bedenkt, was der aktuelle Zeichensatz der Verbindung bedeutet. Danke!

Referenz:

http://php.net/manual/zh/function.mysql-real-escape-string.php
http://www.cnblogs.com/suihui/archive/2012/ 20.09.2694751.html
http://www.neatstudio.com/show-963-1.shtml

Zusätzliche Fragen: @佢作作作

1. Der hinzugefügte Inhalt wird nicht an MySQL übertragen. Wenn also
injiziert wird, wird der hier injizierte Inhalt dann nicht schließlich zur Ausführung an MySQL übertragen? 🎜>Referenz: https://segmentfault.com/q/1010000005994443' or 1=1;-- s
2.

Was bedeutet es? Den Zeichensatz der aktuellen Verbindung ändern?

并考虑到连接的当前字符集

Hier geht es um MySQL GBK Double-Byte-Injection

Wenn sich beispielsweise ein Benutzer anmeldet, nehmen Sie an, dass Ihre SQL-Anweisung lautet:


$sql = "select * from user where user_name='$username' and password='$password'";1 wenn es einen Einspritzpunkt gibt und kein Entweichen möglich ist. Übergeben Sie den Parameter username=' oder 1=1;-- s, dann lautet die SQL-Anweisung zu diesem Zeitpunkt

$sql = "select * from user where user_name='' or 1=1;-- s ' and password='$password'"; Da -- ein Kommentarzeichen ist, muss später nicht beurteilt werden, ob die Umgehung erfolgreich ist

2 Wenn ein Injektionspunkt vorhanden ist und Sonderzeichen-Escapezeichen verwendet werden. Dann lautet die SQL-Anweisung zu diesem Zeitpunkt

$sql = "select * from user where user_name='' or 1=1;-- s ' and password='$password'"; Kann nicht umgangen werden

3 Zu diesem Zeitpunkt tritt das Problem auf. Ein großartiger Hacker hat entdeckt, dass es bei der GBK-Codierung eine Wide-Byte-Injection gibt. Übergeben Sie zu diesem Zeitpunkt username=�' oder 1=1;--

Die zu diesem Zeitpunkt ausgeführte SQL-Anweisung lautet:

Erfolgreich umgangen

$sql = "select * from user where user_name='運' or 1=1;-- s ' and password='$password'"; So lösen Sie dieses Problem

mysql_real_escape_string – Escape-Sonderzeichen in Zeichenfolgen, die in SQL-Anweisungen verwendet werden, unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung

Der Escape-Mechanismus der

-Anweisung durch die

-Methode ändert sich mit der Änderung des Zeichensatzes der aktuellen Datenbankverbindung. Für dieselbe mysql_real_escape_string-Anweisung sind die Escape-Ergebnisse unter verschiedenen Zeichensätzen möglicherweise nicht dieselben. SQL SQLWichtig:

Die

-Methode gehört zu einer

-Erweiterung, die seit der mysql_real_escape_string-Version mysql als veraltet markiert ist und nach der PHP-Version 5.5.0 entfernt wurde. Bitte verwenden Sie die Erweiterungen PHP oder 7 für Datenbankoperationen. Bitte versuchen Sie, mysqli oder PDO (besser) für den Datenbankzeichensatz zu verwenden. utf8

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