2.1.0版本 Security的_remove_evil_attributes方法有bug?
本帖最后由 paperen 于 2012-3-31 14:08 编辑启用全局的XSS过滤(config中的global_xss_filtering)后,使用kindeditor编辑文本提交后发现提交过来的html代码被破坏了
比如我在编辑器源码中的内容为
<p style="margin-top:0.4em;margin-bottom:0.5em;line-height:19px;font-family:sans-serif;font-size:13px;white-space:normal;background-color:#FFFFFF;">
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
</p>
在后端接收数据后输出为
<p
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
</p>
我最终确定到Security的_remove_evil_attributes方法中,而其中使用到的那个正则如下:
$str = preg_replace("/<(\/?[^><]+?)([^A-Za-z\-])(".implode('|', $attribs).")([\s><])([><]*)/i", '<$1$2$4$5', $str, -1, $count);
正则看不明白,而我在 <$1$2$4$5 后面补上>就可以了,不知道这算不算一个bug,而2.0.2中则不会有这个情况,当然_remove_evil_attributes这个方法也不一样
不知道这样补上>是否正确,但如果有人也遇到这个情况况且可以先这样修复
补充:加上>在某些场合还是不顶用,最终我还是用回旧版的_remove_evil_attributes方法,在core中继承一下Security类并重写_remove_evil_attributes
这个很明显不能算BUG,这只是过滤太严格而已。
你可以修改代码,让他符合你的过滤严格程度即可。 Hex 发表于 2012-3-31 14:58 static/image/common/back.gif
这个很明显不能算BUG,这只是过滤太严格而已。
你可以修改代码,让他符合你的过滤严格程度即可。 ...
<p
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
</p>
<p>标签没有>了,格式被破坏了 paperen 发表于 2012-3-31 15:59 static/image/common/back.gif
标签没有>了,格式被破坏了
。。。还有这个情况啊。。我没遇到过。。。。呵呵 Hex 发表于 2012-3-31 16:01 static/image/common/back.gif
。。。还有这个情况啊。。我没遇到过。。。。呵呵
哈哈,你试试在2.1.0的CI 里面随便在一个控制器中
$str = '<p style="margin-top:0.4em;margin-bottom:0.5em;line-height:19px;font-family:sans-serif;font-size:13px;white-space:normal;background-color:#FFFFFF;">Broken p</p>';
echo $this->security->xss_clean( $str );
exit;
然后访问看结果就知道了,hex前辈能告诉我CI这条正则有什么错误不 paperen 发表于 2012-3-31 19:31 static/image/common/back.gif
哈哈,你试试在2.1.0的CI 里面随便在一个控制器中
然后访问看结果就知道了,hex前辈能告诉我CI这条正则 ...
目前我还没有用正则工具测试这条正则,不过从你给的情况看,是正则有问题。
具体我还得测试下,呵呵 这个问题挺烦的,那CI中如何使用编辑器了呢? Icen 发表于 2012-4-7 13:08 static/image/common/back.gif
这个问题挺烦的,那CI中如何使用编辑器了呢?
sorry,有一段时间没上,你可以暂时使用2.0.2中的_remove_evil_attributes代替2.1.0版本的那个 本帖最后由 yzou 于 2012-6-6 09:53 编辑
是security里面第一个正则有问题,我前一阵也遇到了
我是这么改的:
do {
$count = 0;
$attribs = array();
// find occurrences of illegal attribute strings without quotes
preg_match_all("/(".implode('|', $evil_attributes).")\s*=\s*[^\042\047]([^\s><]*)/is",$str, $matches, PREG_SET_ORDER);
这样就没有问题了
yzou 发表于 2012-6-6 09:51 static/image/common/back.gif
是security里面第一个正则有问题,我前一阵也遇到了
我是这么改的:
哈哈,2.1.2版本果然修复了这个问题,你可以对比一下security那个文件
页:
[1]