我需要阻止跨站点脚本(XSS)。如何验证它不是跨站点脚本?问题在于我的“url”BBCode。
function bbcode($input) {
$search = array('/\[a url="(.+?)"\](.*?)\[\/a\]/is');
$replace = array('<a href="$1" style="color: #337ab7;
text-decoration: none" target="_blank">$2
</a>');
return preg_replace($search, $replace, $input);
}
bbcode([a url="javascript://hello.com/%0Aalert(%27s%27)"]XSS[/url]);
上面的代码就是一个例子。单击该链接时,会出现一个JavaScript弹出窗口。此外,该阵列中还有更多BBCode,但我在发布此内容时将其删除以使其更容易。
答案 0 :(得分:1)
与OP聊天后,看起来OP网站被XSS感染了。
正常情况下,XSS来自坏用户,通过提交表单,评论输入,帖子,URL等。所以我们需要阻止XSS,但是由于你已经受到伤害,你可以开始使用以下函数来阻止脚本执行,分析和修复您的网站反对未来的攻击。
function filterScript($content)
{
$default = '';
return preg_replace('/href="javascript:[^"]+"/', $default, $content);
}
<强>测试强>
我们认为这是我们的攻击内容:
$content = '<a href="javascript://somedomain.com/%0Aalert(%27s%27)">XSS</a>';
// this link is attacked
echo $content . "<br>";
// this link is not attacked
echo filterScript($content);
编辑:除了这个答案之外,看看this answer可能还是值得的。
注意:以上功能会有所帮助,但不是一个完整的解决方案,您需要制定网站策略以找出漏洞并找出应如何保护它。
提供的link有一些建议如何以及在何处查看。 OWASP列出了你应该read可能发起的前十大名单,他们还有一个较新的推荐指南。