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

CodeIgniter配置之XSS和CSRF

[复制链接]
发表于 2013-12-6 22:08:15 | 显示全部楼层 |阅读模式

先看一下上面的错误提示,你能很快找到问题所在吗?
该问题就是因为csrf引起的!当csrf_protection为true时,会对每个POST提交页面进行csrf保护校验,验证不通过就会报上面的错误了。
csrf就好比在每个提交页面设置了一个隐藏的验证码,验证码的名字叫csrf_test_name,值为cookie名csrf_cookie_name的值。当提交时,会把cookie中的值和表单中提交的值进行比较,如果表单没有设置该值或者由于cookie过期,则提示上面错误。
所以可以看到全局打开csrf_protection后会导致每个POST提交页面都需要验证并且校验依赖cookie。
创建普通表单时可通过CI提供的form_open函数来创建,但ajax提交呢?就需要手动传入csrf_cookie_name到服务端了。以及cookie会在一定时间后过期,虽然时间默认设置了7200s,但还是存在过期的可能性。难道你愿意因为某些原因让用户看到上面提示?
所以,
不建议开启csrf_protection,可以在需要设置的地方使用验证码或自己设置。
接下来,说一下xss
当global_xss_filtering设置为true,会对GPC进行过滤,如会将
PHP复制代码
 
<script>1</script>
 
复制代码

过滤成
PHP复制代码
 
[removed]1[removed]
 
复制代码

也就是对用户输入的原始数据进行了修改,这是很严重的。也许用户想要的就是过滤前的数据呢?
比如,用户设置密码为a,而经过过滤处理后变成了b,这将会导致用户的密码在数据库中实际为b,用户每次通过系统登录时,都会先做一次转换工作再登录,或者输入密码b也能登录成功。
那如果其他系统也要做登录功能,用户是共享的,那该用户通过密码a登录就失败了。或者也可能系统升级更换框架, 那这批用户也就登录不成功了。这就是潜在的问题,表面上看起来没问题,但可能为以后造成重大影响。所以
只对需要过滤的参数进行过滤,慎重考虑全局参数控制
发表于 2014-3-20 16:27:18 | 显示全部楼层
为了防止CSRF攻击的网站(互联网金融相关),还是需要配置CSRF参数,Wiki,可以详细产看这些内容。

本版积分规则