插入数据库之前的htmlentities

Ber*_*rnd 0 php security xss

我想让我的网站安全抵御XSS攻击.

我有一个模块允许用户将文本(带有特殊字符)插入数据库.此文本显示在起始页面上.

现在我的问题:我应该htmlentities($_POST["userinput"], ENT_QUOTES, 'UTF-8')在将userinput插入数据库之前使用吗?

或者我可以将用户输入直接插入数据库并显示它htmlentities吗?

Gra*_*ray 5

有些人认为你应该在输入输出上对XSS进行消毒.我认为这不是很有价值.首先,只有你在输出上做这件事真的很重要,因为那是你试图减轻的漏洞存在的地方.在我看来,任何依赖于将来自数据库的东西视为可信输入的解决方案都会被打破.

问题是,在某个地方,你(或跟在你后面的人)可能会决定他们需要以不同的方式插入数据 - 一些外部API - 谁知道.关键是,现在您的页面中存在安全漏洞,因为您决定信任来自数据库的数据.

反对在我的出路出路上做这件事的论点分为两部分:

  1. 你没有添加任何额外的安全性,所以你真的只让人觉得安全性是两倍 - 这不是我们想要创造的感觉.我们希望证明某些东西是安全的,而不仅仅是让它感觉双重安全.

  2. 你也可以写一个搞砸了原始数据的bug.如果在渲染时发生这种情况,那就没那么大了,因为你可以修复并正确显示它.如果在存储时发生,则该数据无法恢复.