我在CodeIgniter中遇到了一个非常奇怪的CSRF保护问题。我已经确保使用form_open启动表单,在配置文件中将csrf_protection设置为true,并且还确保隐藏的csrf name和value字段与csrf cookie匹配,如下所示:http://d.pr/3cfB。
发生的情况是,当我提交表单时,我得到“遇到错误。您请求的操作不被允许”。错误,但不确定原因。当我关闭csrf_protection时,表单工作正常。
更奇怪的是,我使用tank_auth库进行身份验证,它还使用form_open作为登录表单。我做了检查,以确保当csrf_protection打开时,登录表单中有一个隐藏的csrf字段,并且我能够提交表单并顺利登录。
有没有想过我能做些什么来调试这个问题?
发布于 2011-03-21 01:14:34
我找到问题了。在我的一个定制库中,我使用了parent::_sanitize_globals(),这显然是导致错误的原因。我在某处读到,如果我打开了xss过滤,我就不需要进行全局清理。
发布于 2011-03-20 22:44:30
首先,会话类需要名为“csrf_ token _name”的令牌,而不是名为“csrf_salemarked_token$...”的令牌。
这篇博文介绍了AJAX with CSRF Protection in Codeigniter 2.0。
Tank_auth从隐藏的输入表单域获取令牌,而不是cookie。AJAX请求需要从隐藏字段获取令牌(如果可用),或者从cookie (如果没有表单)获取。
https://stackoverflow.com/questions/5367096
复制相似问题