Bobby 发表于 2013-12-6 22:08:15

CodeIgniter配置之XSS和CSRF

http://codeigniter.org.cn/forums/data/attachment/album/201312/06/215259oxzq5qbt7b67cpvt.png
先看一下上面的错误提示,你能很快找到问题所在吗?该问题就是因为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进行过滤,如会将
<script>1</script>

过滤成

1

也就是对用户输入的原始数据进行了修改,这是很严重的。也许用户想要的就是过滤前的数据呢?比如,用户设置密码为a,而经过过滤处理后变成了b,这将会导致用户的密码在数据库中实际为b,用户每次通过系统登录时,都会先做一次转换工作再登录,或者输入密码b也能登录成功。那如果其他系统也要做登录功能,用户是共享的,那该用户通过密码a登录就失败了。或者也可能系统升级更换框架, 那这批用户也就登录不成功了。这就是潜在的问题,表面上看起来没问题,但可能为以后造成重大影响。所以只对需要过滤的参数进行过滤,慎重考虑全局参数控制

fuchao2012 发表于 2014-3-20 16:27:18

为了防止CSRF攻击的网站(互联网金融相关),还是需要配置CSRF参数,Wiki,可以详细产看这些内容。
页: [1]
查看完整版本: CodeIgniter配置之XSS和CSRF