首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql_real_escape_string()是否对SQL注入有充分的保护?

mysql_real_escape_string()是否对SQL注入有充分的保护?
EN

Stack Overflow用户
提问于 2009-08-02 23:37:46
回答 3查看 13.1K关注 0票数 38

action=share--这个上,有一节声称您可以使用某些亚洲字符编码绕过mysql_real_escape_string。

使用mysql_real_escape_string或GBK绕过BIG5 () “注入串” に関する追加情報: 以上字符为中文Big5。

这是真的吗?如果是的话,如果您无法访问准备好的声明,您将如何保护您的网站不受此影响?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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是安全的。

票数 25
EN

Stack Overflow用户

发布于 2009-08-02 23:38:34

我非常肯定,只有使用SQL来更改char编码时,它才不起作用。

票数 3
EN

Stack Overflow用户

发布于 2015-07-30 02:19:54

正如其他人所展示的,在模糊的边缘情况下可以绕过。这是一种已知的绕过转义逻辑的策略,但可能还有其他尚未被发现的未知漏洞。

防止PHP中的SQL注入的简单而有效的方法是在可能的地方使用准备的语句,在不能使用的地方使用非常严格的白名单。

当实际使用而不是由PDO驱动程序模拟时,准备好的语句显然是安全的(至少在SQL注入方面是这样),因为它们解决了应用程序安全性的一个基本问题:它们将数据与对数据操作的指令分离开来。它们是以单独的数据包发送的;参数化的值从来没有机会污染查询字符串。

现在是2015年。不要再逃跑和连接了。您仍然应该根据应用程序(和业务)逻辑验证您的输入,但只需使用准备好的语句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1220182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档