Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Schützt mysql_real_escape_string() VOLLSTÄNDIG vor SQL-Injection?

Laut Stefan Esser, "mysql_real_escape_string() [ist] nicht sicher, wenn SET NAMES verwendet wird."

Seine Erklärung, aus seinem Blog :

SET NAMES wird normalerweise verwendet, um die Codierung von der Standardcodierung auf die von der Anwendung benötigte umzuschalten. Dies geschieht auf eine Weise, dass mysql_real_escape_string weiß davon nichts. Das bedeutet, wenn Sie zu einer Multi-Byte-Codierung wechseln, die Backslash als 2. 3. 4.… Byte zulässt, bekommen Sie Probleme, weil mysql_real_escape_string entkommt nicht richtig. UTF-8 ist sicher…

Ein sicherer Weg, die Kodierung zu ändern, ist mysql_set_charset , aber das ist nur in neuen PHP-Versionen verfügbar

Er erwähnt jedoch, dass UTF-8 sicher ist.