htmlspecialchars vs htmlentities关注XSS

时间:2010-09-02 01:30:20

标签: php xss

我已经看到很多相互矛盾的答案。很多人都喜欢引用单独的php函数不能保护你免受xss的攻击。<​​/ p>

什么XSS可以通过htmlspecialchars完成什么,以及什么可以通过htmlentities?

我理解功能之间的区别,但不了解您留下的不同级别的xss保护。谁能解释一下?

3 个答案:

答案 0 :(得分:13)

htmlspecialchars()不会保护您免受UTF-7 XSS攻击,即使在IE 9中仍然困扰着Internet Explorer:http://securethoughts.com/2009/05/exploiting-ie8-utf-7-xss-vulnerability-using-local-redirection/

例如:

<?php
$_GET['password'] = 'asdf&ddddd"fancy˝quotes˝';

echo htmlspecialchars($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&amp;ddddd&quot;fancyË

echo htmlentities($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&amp;ddddd&quot;fancy&Euml;quotes

您应该始终使用htmlentities,并且在清理用户输入时很少使用htmlspecialchars。另外,你应该始终剥离标签。对于非常重要且安全的网站,您应该 从不 信任strip_tags()。使用HTMLPurifier for PHP

答案 1 :(得分:4)

如果PHP的header命令用于设置字符集

header('Content-Type: text/html; charset=utf-8');

然后htmlspecialcharshtmlentities应该对输出HTML都是安全的,因为使用UTF-7编码无法实现XSS

请注意,这些函数不应用于将值输出到JavaScript或CSS中,因为可以输入允许JavaScript或CSS转义并使您的网站面临风险的字符。请参阅XSS Prevention Cheat Sheet了解如何妥善处理这些情况。

答案 2 :(得分:2)

我不确定你是否找到了你想要的答案,但是,我也在寻找一个HTML清洁工。我有一个我正在构建的应用程序,并希望能够使用HTML代码,甚至可能是Javascript或其他语言,并将它们放入MySQL数据库,而不会导致问题或允许XSS问题。我发现HTML Purifier它似乎是用于清理PHP系统上用户提交的信息的最发达且仍然维护的工具。链接的页面是他们的compairison页面,可以推断为什么他们的或其他工具可能有用。希望这有帮助!