发布:2014/7/10 15:55:22作者:管理员 来源:本站 浏览次数:1481
先看一下上面的错误提示,你能很快找到问题所在吗?
该问题就是因为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进行过滤,如会将
过滤成
也就是对用户输入的原始数据进行了修改,这是很严重的。也许用户想要的就是过滤前的数据呢?
比如,用户设置密码为a,而经过过滤处理后变成了b,这将会导致用户的密码在数据库中实际为b,用户每次通过系统登录时,都会先做一次转换工作再登录,或者输入密码b也能登录成功。
那如果其他系统也要做登录功能,用户是共享的,那该用户通过密码a登录就失败了。或者也可能系统升级更换框架, 那这批用户也就登录不成功了。这就是潜在的问题,表面上看起来没问题,但可能为以后造成重大影响。所以
只对需要过滤的参数进行过滤,慎重考虑全局参数控制