0

为了在 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;
    }
}

在将代码集成到我的实时网站之前,如何提高该代码的安全性?或者没关系?用于插入图片和新闻的文本框位于密码保护区域内。

感谢您的帮助

4

1 回答 1

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]应该做什么。)

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

于 2013-08-07T10:58:50.423 回答