我在CodeIgniter中遇到了一个非常奇怪的CSRF保护问题。我确保使用form_open来启动表单,在配置文件中将csrf_protection设置为true,并且我还确保隐藏的csrf名称和值字段与csrf cookie匹配,如下所示:http://d.pr/3cfB 。
当我提交表单时,我会收到“遇到错误。我们不允许您请求的操作。”错误,我不知道为什么。当我关闭csrf_protection时,表单工作正常。
甚至更奇怪的是我使用tank_auth库进行身份验证,并且还使用form_open作为登录表单。当csrf_protection打开时,我确实检查了登录表单中是否有隐藏的csrf字段,并且我能够提交表单并且没有问题登录。
关于如何调试此问题的想法?
答案 0 :(得分:1)
首先,会话类需要一个名为' csrf_token_name'的标记,而不是名为' csrf_salemarked_token $ ...'。
此博客文章涵盖AJAX with CSRF Protection in Codeigniter 2.0。
Tank_auth从隐藏的输入表单字段获取令牌,而不是cookie。您的AJAX请求需要从隐藏字段获取令牌(如果可用),或者如果没有表单则获取cookie。
答案 1 :(得分:1)
我发现了问题。在我的一个自定义库中,我有父:: _ sanitize_globals(),这显然是导致错误的原因。我在某处读到,如果我打开了xss过滤,我就不需要进行全局清理。