首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Htmlentities vs addslashes vs mysqli_real_escape_string

Htmlentities vs addslashes vs mysqli_real_escape_string
EN

Stack Overflow用户
提问于 2010-02-07 02:43:13
回答 7查看 12K关注 0票数 7

我读过一些关于保护PHP应用程序的文章,在我看来,在将数据插入到MySQL表中时,mysqli_real_escape_string是正确的函数,因为对于聪明的攻击者来说,addslashes可能会导致一些奇怪的事情发生。对吗?

然而,有一件事让我感到困惑。我似乎记得有人建议在将用户输入的数据回显给用户以保护他们的数据时,addslasheshtmlentities更好,但似乎addslashes是有漏洞的那个。这是真的吗,还是我记错了?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-07 02:55:49

您的数据有不同的上下文。将数据插入数据库的上下文需要与呈现html/xml或甚至电子邮件消息的上下文不同地进行转义。

在所有新代码中,都应该弃用进入db的转义数据,而支持准备好的语句。任何人告诉你不是这样的,都是在给你带来极大的伤害。

进入浏览器的转义数据需要以多种不同的方式进行转义,具体取决于目标。有时候htmlspecialchars就足够了,有时候你需要使用htmlentities。有时,您需要数字实体。这是一个你应该做一些研究的主题,以了解所有的细微差别。

我赖以生存的一般规则是验证(不是过滤器,如果不正确则拒绝)输入和转义输出(基于上下文)。

票数 5
EN

Stack Overflow用户

发布于 2010-02-07 02:49:02

它们是用于不同目的的不同工具。

mysqli_real_escape_string使得数据可以安全地插入到MySQL中(但参数化查询更好)。

Htmlentities使数据可以安全地输出到HTML文档中

地址斜杠使数据在其他几种情况下是安全的,但对于MySQL是不够的

票数 12
EN

Stack Overflow用户

发布于 2010-02-07 02:45:08

如果您可能在服务器上使用PHP5,您也可以使用PDO libs,它为您完成大部分转义操作。

在回显时,我个人更喜欢htmlspecialchars,但有人可能会纠正我

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

https://stackoverflow.com/questions/2214244

复制
相关文章

相似问题

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