在action=share--这个上,有一节声称您可以使用某些亚洲字符编码绕过mysql_real_escape_string。
使用mysql_real_escape_string或GBK绕过BIG5 () “注入串” に関する追加情報: 以上字符为中文Big5。
这是真的吗?如果是的话,如果您无法访问准备好的声明,您将如何保护您的网站不受此影响?
发布于 2009-08-03 02:59:29
Stefan Esser说,"__mysql_real_escape_string()在使用SET NAMES时是不安全的。“
他的解释,从他的博客
SET名称通常用于将编码从默认的转换为应用程序需要的编码。这是以一种
mysql_real_escape_string不知道的方式完成的。这意味着如果您切换到某种允许反斜杠作为第二、第三、第四…的多字节编码字节,您会遇到麻烦,因为mysql_real_escape_string不能正确地转义。8是安全的… 更改编码的安全方法是mysql_set_charset,但这只能在新的PHP版本中使用。
他确实提到了UTF-8是安全的。
发布于 2009-08-02 23:38:34
我非常肯定,只有使用SQL来更改char编码时,它才不起作用。
发布于 2015-07-30 02:19:54
正如其他人所展示的,在模糊的边缘情况下可以绕过。这是一种已知的绕过转义逻辑的策略,但可能还有其他尚未被发现的未知漏洞。
防止PHP中的SQL注入的简单而有效的方法是在可能的地方使用准备的语句,在不能使用的地方使用非常严格的白名单。
当实际使用而不是由PDO驱动程序模拟时,准备好的语句显然是安全的(至少在SQL注入方面是这样),因为它们解决了应用程序安全性的一个基本问题:它们将数据与对数据操作的指令分离开来。它们是以单独的数据包发送的;参数化的值从来没有机会污染查询字符串。
现在是2015年。不要再逃跑和连接了。您仍然应该根据应用程序(和业务)逻辑验证您的输入,但只需使用准备好的语句。
https://stackoverflow.com/questions/1220182
复制相似问题