通过htmlentities方法传递数据后,我们将数据保存在数据库中,以避免任何注入攻击
在使用它的同时,我们执行html_entity_decode以获取原始值。在某些情况下,在我们的代码中,由于我们的保存技术(很难解释),htmlentities在相同的数据块上执行了2-3次。因此,我们基本上希望避免对同一字符串进行多次编码。
有没有一种可靠的方法来检测字符串是否已经通过htmlentities方法传递了?
我猜一种方法是检查编码字符串中是否有像"这样的东西,但还有更可靠的方法吗?有没有内置的方法可以告诉我字符串是否编码?
我们正在使用Laravel,也许其中的一个辅助方法可以帮助我们?
发布于 2021-07-12 16:13:19
这从根本上说是错误的方法。在数据到来时存储原始数据。虽然它在数据库中,但它不会对您造成任何伤害。
仅当您要将其放入HTML文档时才通过htmlentities传递它-因为这是唯一可能存在危险的上下文。
这将节省所有的编码和解码-您只需根据需要对其进行编码。
发布于 2021-07-12 16:30:42
正如ADyson所提到的,您正在错误地处理整个系统中的数据。
Laravel的模板引擎“刀片”将自动通过htmlspecialchars()发送您的变量,以防止XSS攻击。
PHP {{ }}语句会通过
的
htmlspecialchars函数自动发送,以防止XSS语言攻击。
这将保护您的站点免受潜在的XSS攻击,而无需在对数据库运行INSERT/SELECT查询时对数据进行编码/解码。
如果您正在使用Laravel内置的DB Builder / Eloquent,那么您的SQL查询也是protected automatically的。
Laravel查询构建器使用
参数绑定来保护您的应用程序免受SQL注入攻击。不需要清理作为绑定传递的字符串。
https://stackoverflow.com/questions/68343955
复制相似问题