paperen 发表于 2012-3-31 13:36:32

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

Hex 发表于 2012-3-31 14:58:56

这个很明显不能算BUG,这只是过滤太严格而已。
你可以修改代码,让他符合你的过滤严格程度即可。

paperen 发表于 2012-3-31 15:59:30

Hex 发表于 2012-3-31 14:58 static/image/common/back.gif
这个很明显不能算BUG,这只是过滤太严格而已。
你可以修改代码,让他符合你的过滤严格程度即可。 ...


<p
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
</p>

<p>标签没有>了,格式被破坏了

Hex 发表于 2012-3-31 16:01:01

paperen 发表于 2012-3-31 15:59 static/image/common/back.gif
标签没有>了,格式被破坏了

。。。还有这个情况啊。。我没遇到过。。。。呵呵

paperen 发表于 2012-3-31 19:31:20

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这条正则有什么错误不

Hex 发表于 2012-3-31 21:14:02

paperen 发表于 2012-3-31 19:31 static/image/common/back.gif
哈哈,你试试在2.1.0的CI 里面随便在一个控制器中

然后访问看结果就知道了,hex前辈能告诉我CI这条正则 ...

目前我还没有用正则工具测试这条正则,不过从你给的情况看,是正则有问题。
具体我还得测试下,呵呵

Icen 发表于 2012-4-7 13:08:00

这个问题挺烦的,那CI中如何使用编辑器了呢?

paperen 发表于 2012-5-6 16:04:00

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:51:46

本帖最后由 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);


这样就没有问题了

paperen 发表于 2012-8-2 16:36:39

yzou 发表于 2012-6-6 09:51 static/image/common/back.gif
是security里面第一个正则有问题,我前一阵也遇到了
我是这么改的:



哈哈,2.1.2版本果然修复了这个问题,你可以对比一下security那个文件
页: [1]
查看完整版本: 2.1.0版本 Security的_remove_evil_attributes方法有bug?