Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php bbcodes的preg_替换:如何提高安全性?_Php_Image_Security_Tinymce_Preg Replace - Fatal编程技术网

Php bbcodes的preg_替换:如何提高安全性?

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\](.*)\[\

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