为了在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;
}
}
在将代码集成到我的实时网站之前,如何提高代码的安全性?还是可以吗? 用于插入图片和新闻的文本框位于通行保护区域内。
感谢您的帮助
答案 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,但再次找到能够正确,安全地支持它们的库可能是一个挑战。