评估 mysql_real_escape_string() 的完整性
人们对 mysql_real_escape_string() 在保护数据库查询免受 SQL 注入攻击方面的可靠性提出了担忧。批评者参考了旧文章,指出该函数在提供足够保护的能力方面存在潜在缺陷。
MySQL 文档
mysql_real_escape_string() 的 MySQL C API 文档承认了这一问题:
If you need to change the character set of the connection, you should use the mysql_set_character_set() function rather than executing a SET NAMES (or SET CHARACTER SET) statement. mysql_set_character_set() works like SET NAMES but also affects the character set used by mysql_real_escape_string(), which SET NAMES does not.
PHP 的对应部分
在 PHP 中,mysql_set_charset() 的功能与 MySQL 的 mysql_set_character_set() 类似,并且充当 PHP 的对应部分。
Proofcode
<?php $str = "'mystring'"; // Set encoding mysql_set_charset('utf8'); // Escape string with correct encoding $escaped_str = mysql_real_escape_string($str);
通过在使用 mysql_real_escape_string() 之前利用 mysql_set_charset() 修改编码,可以确保字符集设置正确并且函数按预期运行。这解决了对潜在漏洞的担忧,并允许 mysql_real_escape_string() 有效防止 SQL 注入攻击。
以上是mysql_real_escape_string() 仍然是针对 SQL 注入的可靠保护吗?的详细内容。更多信息请关注PHP中文网其他相关文章!