我读过一些关于保护PHP应用程序的文章,在我看来,在将数据插入到MySQL表中时,mysqli_real_escape_string是正确的函数,因为对于聪明的攻击者来说,addslashes可能会导致一些奇怪的事情发生。对吗?
然而,有一件事让我感到困惑。我似乎记得有人建议在将用户输入的数据回显给用户以保护他们的数据时,addslashes比htmlentities更好,但似乎addslashes是有漏洞的那个。这是真的吗,还是我记错了?
发布于 2010-02-07 02:55:49
您的数据有不同的上下文。将数据插入数据库的上下文需要与呈现html/xml或甚至电子邮件消息的上下文不同地进行转义。
在所有新代码中,都应该弃用进入db的转义数据,而支持准备好的语句。任何人告诉你不是这样的,都是在给你带来极大的伤害。
进入浏览器的转义数据需要以多种不同的方式进行转义,具体取决于目标。有时候htmlspecialchars就足够了,有时候你需要使用htmlentities。有时,您需要数字实体。这是一个你应该做一些研究的主题,以了解所有的细微差别。
我赖以生存的一般规则是验证(不是过滤器,如果不正确则拒绝)输入和转义输出(基于上下文)。
发布于 2010-02-07 02:49:02
它们是用于不同目的的不同工具。
mysqli_real_escape_string使得数据可以安全地插入到MySQL中(但参数化查询更好)。
Htmlentities使数据可以安全地输出到HTML文档中
地址斜杠使数据在其他几种情况下是安全的,但对于MySQL是不够的
发布于 2010-02-07 02:45:08
如果您可能在服务器上使用PHP5,您也可以使用PDO libs,它为您完成大部分转义操作。
在回显时,我个人更喜欢htmlspecialchars,但有人可能会纠正我
https://stackoverflow.com/questions/2214244
复制相似问题