我对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新手。
答案 0 :(得分:3)
不要过度复杂化清理,只需执行$cleaned = htmlentities($lol);
这会将所有可能的html标记转换为适当的html实体作为字符串。
你说my site will only be outputted between <p> tags and <h1> tags
所以在这种情况下,由于用户无法使用html,因此他们无法创建链接,因此会出现问题。
然而,在这个测试用例中,即使在删除html标记后,您仍然将$cleaned
字符串回显到一个href(例如$lol
中没有html标记)仍然输出有效的javascript。
XSS通常依赖脚本标签,例如<script>alert('asd');</script>
在这种情况下没有。
如果你仍然希望能够回应一个ahref,我可以建议从前面剥离javascript这个词吗?或者将所有非字母数字字符转换为html实体。