用户输入过滤 - 我是否需要过滤HTML?

djn*_*djn 5 php security validation user-input

注意:我在其他地方处理SQL注入和输出转义 - 这个问题仅涉及输入过滤,谢谢.

我正在重构我的用户输入过滤功能.在使用filter_var()将GET/POST参数传递给特定于类型的过滤器之前,我执行以下操作:

现在的问题是:将参数传递给像htmLawedHTML Purifier这样的过滤器仍然有意义,还是我认为输入是安全的?在我看来,这两者主要区别于允许的HTML元素和属性的粒度(我不感兴趣,因为我删除了所有内容),但是htmLawed文档有一个关于" 危险字符 "的部分,表明可能存在使用它的原因.在这种情况下,它会是一个理智的配置吗?

roo*_*ook 2

有许多不同的 XSS 安全方法。了解您的方法是否有效的唯一原因是通过利用进行测试。我建议使用免费 XSS 漏洞扫描程序* 或开源wapiti

老实说,我永远不会使用 strip_tags() 因为你并不总是需要 html 标签来执行 javascript!我喜欢htmlspecialchars($var,ENT_QUOTES);

例如,这很容易受到 xss 攻击:

print('<A HREF="http://www.xssed.com/'.strip_tags($_REQUEST[xss]).'">link</a>');
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不需要 <> 来执行 javascript,因为您可以使用 onmouseover,这里是一个示例攻击:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"';
Run Code Online (Sandbox Code Playgroud)

ENT_QUOTES 将处理双引号,从而修补此 XSS 漏洞。

*我隶属于该网站/服务。