mysql_real_escape_string() 是抵御 SQL 注入的坚不可摧的盾牌吗?
justinshattuck.com 上的一个部分表明 mysql_real_escape_string() 在某些情况下容易出错亚洲字符编码。具体来说,它声称编码绕过 mysql_real_escape_string() 使用 BIG5 或 GBK 将危险字符偷运到查询中。
这个漏洞是真的吗?
根据 Stefan Esser,答案是令人不安的“是”。他声称当使用 SET NAMES 时 mysql_real_escape_string() 会出现问题。此方法切换编码以满足应用程序的需要,而无需通知 mysql_real_escape_string()。因此,如果多字节编码允许反斜杠作为第二个、第三个或第四个字节,则会出现问题。 Mysql_real_escape_string() 仍然没有注意到这种不规则性,并且无法正确转义字符。
保护您的网站
Esser 建议 UTF-8 仍然是安全的编码,但 UTF -8 并不总是一个选项。不幸的是,更安全的替代方案 mysql_set_charset 仅在最近的 PHP 版本中可用。
以上是`mysql_real_escape_string()` 是针对所有字符编码中的 SQL 注入的可靠防御吗?的详细内容。更多信息请关注PHP中文网其他相关文章!