【发布时间】:2014-01-12 22:16:34
【问题描述】:
我对 xss 保护还很陌生,这让我开始思考它是否安全。
如果我使用例如:
$lol = "javascript:alert('asd')";
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$config->set('HTML.Allowed', '');
$cleaned = $purifier->purify($lol);
<a href="<?php echo $cleaned; ?>"><?php echo $cleaned; ?></a>
上面的代码仍然会输出一个警报功能,例如,如果我按下一个链接,就会显示一个弹出窗口。
考虑到 XSS 是否安全?
我也使用$config->set('HTML.Allowed', '');,因为我只想输出文本而不输出任何 HTML。
为了安全起见,我是否应该添加一个正则表达式来检查;: 例如[^:;]。
值得指出的是,用户提交给我网站的所有数据只会在<p>标签和<h1>标签之间输出。
提前致谢,
// XSS 新手。
【问题讨论】:
-
旁注:HTML Purifier 没有捕获的原因是因为它不是 HTML - 它是 HTML 属性中的数据。如果您将
<a href="javascript:alert('asd')">javascript:alert('asd')</a>放入HTML Purifier 中,它会做您想做的事——因为此时它知道它必须将javascript:alert('asd')视为一个链接。但就像 Pez 说的那样,对于您想要实现的目标来说,这可能是矫枉过正。 :)
标签: php xss sanitization htmlpurifier