首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断一个字符串是否已经在PHP中通过htmlentities传递?它需要html_entity_decode吗?

如何判断一个字符串是否已经在PHP中通过htmlentities传递?它需要html_entity_decode吗?
EN

Stack Overflow用户
提问于 2021-07-12 16:07:02
回答 2查看 50关注 0票数 1

通过htmlentities方法传递数据后,我们将数据保存在数据库中,以避免任何注入攻击

在使用它的同时,我们执行html_entity_decode以获取原始值。在某些情况下,在我们的代码中,由于我们的保存技术(很难解释),htmlentities在相同的数据块上执行了2-3次。因此,我们基本上希望避免对同一字符串进行多次编码。

有没有一种可靠的方法来检测字符串是否已经通过htmlentities方法传递了?

我猜一种方法是检查编码字符串中是否有像"这样的东西,但还有更可靠的方法吗?有没有内置的方法可以告诉我字符串是否编码?

我们正在使用Laravel,也许其中的一个辅助方法可以帮助我们?

EN

回答 2

Stack Overflow用户

发布于 2021-07-12 16:13:19

这从根本上说是错误的方法。在数据到来时存储原始数据。虽然它在数据库中,但它不会对您造成任何伤害。

仅当您要将其放入HTML文档时才通过htmlentities传递它-因为这是唯一可能存在危险的上下文。

这将节省所有的编码和解码-您只需根据需要对其进行编码。

票数 5
EN

Stack Overflow用户

发布于 2021-07-12 16:30:42

正如ADyson所提到的,您正在错误地处理整个系统中的数据。

Laravel的模板引擎“刀片”将自动通过htmlspecialchars()发送您的变量,以防止XSS攻击。

documentation

PHP {{ }}语句会通过

htmlspecialchars函数自动发送,以防止XSS语言攻击。

这将保护您的站点免受潜在的XSS攻击,而无需在对数据库运行INSERT/SELECT查询时对数据进行编码/解码。

如果您正在使用Laravel内置的DB Builder / Eloquent,那么您的SQL查询也是protected automatically的。

Laravel查询构建器使用

参数绑定来保护您的应用程序免受SQL注入攻击。不需要清理作为绑定传递的字符串。

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

https://stackoverflow.com/questions/68343955

复制
相关文章

相似问题

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