preb_replace for bbcodes:如何提高安全性?

时间:2013-08-06 07:36:19

标签: php image security tinymce preg-replace

为了在tinymce(独立)中使用bbcodes,我创建了这段代码:

private function regExUrl($content) {
    if(isset($content) && is_string($content)) {
        return  preg_replace(
        array('|(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)|', '|\[img\](.*)\[\/img\]|', '|\[b\]|', '|\[/b\]|', '|\[i\]|', '|\[/i\]|', '|\[url=../../../../\]|', '|\[/url\]|'), 
        array('<a href="$1">$1</a>', '<img src="$1" class="wide" />', '<b>', '</b>', '<i>', '</i>', '<url>', '</url>'),  
        $content);

    } else {
        return $content;
    }
}

在将代码集成到我的实时网站之前,如何提高代码的安全性?还是可以吗? 用于插入图片和新闻的文本框位于通行保护区域内。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

乍一看(可能还有更多):

http://www.example.com/xxx?xxx"onmouseover="alert('XSS');
[img]javascript:alert('XSS')[/img]
[img]xxx" onerror="alert('XSS')[/img]

此外strip_tags()不是作为安全功能;在以前的PHP版本中有一些方法,如果使用allowed-tags运行它是完全不安全的。当然,它也会禁止在评论中合法使用小于号。

(在非安全性说明中,也可能有不匹配的标签,弄乱了页面的其余部分,我无法弄清楚[url]应该做什么。)< / p>

安全地编写标记生成器很难。通常这意味着建议是使用一个已知良好的库,但我个人从未见过一个不透水的PHP bbcode实现(建议欢迎)。如果要允许HTML样式标记,请查看HTML Purifier。还有其他更简单的面向用户的迷你标记语言,例如Markdown,但再次找到能够正确,安全地支持它们的库可能是一个挑战。