Php bbcodes的preg_替换:如何提高安全性?
为了在tinymce(单机版)中使用bbcodes,我创建了以下代码:Php bbcodes的preg_替换:如何提高安全性?,php,image,security,tinymce,preg-replace,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\](.*)\[\
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;
}
}
private function regExUrl($content){
if(isset($content)&&is_字符串($content)){
返回预更换(
数组(“|(https?:/([-\w\.]+)+(:\d+)(/([\w/\.]*(\?\S+)?))”、“| \[img\](..\[\/img\]..\[\/img\].\[\]b\][b\][b\][b\][124;”、“\[i\][i\][i\][i\].][124\]、”、“../../../][/url=”、“../../][124\][124\],
数组(“”,“”,“”,“”,“”,“”,“”,“”),
$content);
}否则{
返回$content;
}
}
在我将代码集成到我的live网站之前,如何提高代码的安全性?还是可以?
用于插入图片和新闻的文本框位于通行证保护区内
感谢您的帮助第一眼看到的漏洞(可能还有更多):
另外,strip_tags()
不作为安全功能;在以前的PHP版本中,有很多方法可以解决这个问题,如果使用允许的标记运行,那么它是完全不安全的。当然,它也不允许在评论中合法使用小于符号
(在非安全注意事项中,也可能有不匹配的标记,弄乱了页面的其余部分,我根本不知道[url]
应该做什么。)
安全地编写标记生成器很困难。通常这意味着建议是使用一个已知的好库,但就我个人而言,我从未见过一个无懈可击的PHP bbcode实现(欢迎建议)。如果您想允许HTML样式的标记,请查看HTML净化器。还有其他更简单的面向用户的迷你标记语言,如Markdown,但同样地,找到正确、安全地支持它们的库可能是一个挑战。您是否也在清理数据或只是解析数据?我不使用清理过滤器。它们对我来说是新的(我是新手),但为了避免html代码,我使用了strip_标记。够了吗?
http://www.example.com/xxx?xxx"onmouseover="alert('XSS');
[img]javascript:alert('XSS')[/img]
[img]xxx" onerror="alert('XSS')[/img]