我已经看到了很多相互矛盾的答案.很多人都喜欢引用单独的php函数不会保护你免受xss的攻击.
什么XSS确实可以通过htmlspecialchars和什么可以通过htmlentities?
我理解功能之间的区别,但不是你留下的不同级别的xss保护.谁能解释一下?
The*_*ith 13
htmlspecialchars()不会保护您免受UTF-7 XSS攻击,即使在IE 9中仍然困扰着Internet Explorer:http://securethoughts.com/2009/05/exploiting-ie8-utf-7-xss-vulnerability-using -本地重定向/
例如:
<?php
$_GET['password'] = 'asdf&ddddd"fancy?quotes?';
echo htmlspecialchars($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&ddddd"fancyË
echo htmlentities($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&ddddd"fancyËquotes
Run Code Online (Sandbox Code Playgroud)
您应该始终使用htmlentities,并且在清理用户输入时很少使用htmlspecialchars.另外,您应该始终删除标签.对于非常重要且安全的站点,您永远不应该信任strip_tags().使用HTMLPurifier for PHP.
如果使用 PHP 的header命令设置字符集
header('Content-Type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)
thenhtmlspecialchars并且htmlentities对于 HTML 的输出都应该是安全的,因为使用 UTF-7 编码无法实现XSS。
请注意,这些函数不应用于将值输出到 JavaScript 或 CSS,因为输入的字符可能会使 JavaScript 或 CSS 被转义,从而使您的站点处于危险之中。请参阅XSS 预防备忘单,了解如何正确处理这些情况。
| 归档时间: |
|
| 查看次数: |
23238 次 |
| 最近记录: |