用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6591|回复: 10
收起左侧

[安全] CI防止XSS攻击

[复制链接]
发表于 2014-1-10 11:31:39 | 显示全部楼层 |阅读模式
1:config文件中:
PHP复制代码
$config['global_xss_filtering'] = true;
复制代码




2 system/core/input.php文件中   大概在 697行
PHP复制代码
        if ($this->_enable_xss === TRUE)
        {
            $str = $this->security->xss_clean($str);
        }
复制代码


改成

PHP复制代码
        if ($this->_enable_xss === TRUE)
        {
            $str=htmlspecialchars($str);
            $str = $this->security->xss_clean($str);
        }
复制代码



如果哪里再要显示HTML源码  再用
htmlspecialchars_decode  给转换回来。 这样应该就能比较好的快速解决XSS问题


发表于 2014-1-10 12:59:00 | 显示全部楼层
不建议这样子全局操作,做这个修改之前最好让其他成员都知道, 避免把一些不需要处理的数据处理了。
 楼主| 发表于 2014-1-10 14:00:03 | 显示全部楼层
Bobby 发表于 2014-1-10 12:59
不建议这样子全局操作,做这个修改之前最好让其他成员都知道, 避免把一些不需要处理的数据处理了。 ...

htmlspecialchars 只会涉及到  & ‘ “  < > 这几个字符。  比一个一个处理方便很多。 在如果要解析到这几个字符的再特殊处理。



发表于 2014-1-10 14:04:52 | 显示全部楼层
如果没记错的话,这个处理会在初始化的时候就处理, 也就是GPC拿到的时候也是处理之后的结果,拿不到原始值吧。如果说某个接口中的参数值包含这几个值那就可能存在问题了,尤其是一些加密校验的地方。
 楼主| 发表于 2014-1-10 17:08:31 | 显示全部楼层
Bobby 发表于 2014-1-10 14:04
如果没记错的话,这个处理会在初始化的时候就处理, 也就是GPC拿到的时候也是处理之后的结果,拿不到原始值 ...

CI就算开了global_xss_filtering   也不会过滤<> 符号。 但是如果用户输入了 <tr><td><br><h1>等等合法HTML标签,会把整个页面给搞乱的。 当然了,如果有个例。也会作特殊处理。 这样做只是会方便些。  哎。最近这社区都没啥人气了。跟你讨论讨论,带动点气氛。

发表于 2014-1-10 18:12:03 | 显示全部楼层
主要不是之后的处理问题, 是如果打开控制,能不能方便的接收到原始值,即便出现的概率下,因为有一些情况是要拿到原始数据再处理的,比如密码、签名这些。。我的意思就是打开globa之后没找到拿原始值的方法。
 楼主| 发表于 2014-1-10 20:49:43 | 显示全部楼层
Bobby 发表于 2014-1-10 18:12
主要不是之后的处理问题, 是如果打开控制,能不能方便的接收到原始值,即便出现的概率下,因为有一些情况 ...

OK  明白你的意思了。 你觉得最好不要开
$config['global_xss_filtering' = true;
这个?

恩。 这玩意效率开了之后影响很 这个算法应该写得有问题。  


发表于 2014-1-10 22:13:48 | 显示全部楼层
效率倒不是问题,关键是做这个调整之后方不方便拿到原始未处理的数据,因为不保证以后不会用到,所以我说不开,在处理的地方去处理。拿的方法肯定有, 但没有找到很方便、合理的方式。 不过转义问题确实是需要注意的问题,防止xss注入。
发表于 2014-2-17 09:44:09 | 显示全部楼层
不明觉历
发表于 2014-2-17 15:17:02 | 显示全部楼层
还是接受的时候手动开启比较好,比如有时候要获取带HTML标签的内容,全局开启之后就杯具了

本版积分规则