PHP preg_replace安全性

时间:2016-03-26 19:15:35

标签: php code-injection

我需要阻止跨站点脚本(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,但我在发布此内容时将其删除以使其更容易。

1 个答案:

答案 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可能发起的前十大名单,他们还有一个较新的推荐指南。