CodeIgniter的CSRF令牌问题

时间:2011-03-20 06:21:58

标签: codeigniter csrf-protection

我在CodeIgniter中遇到了一个非常奇怪的CSRF保护问题。我确保使用form_open来启动表单,在配置文件中将csrf_protection设置为true,并且我还确保隐藏的csrf名称和值字段与csrf cookie匹配,如下所示:http://d.pr/3cfB

当我提交表单时,我会收到“遇到错误。我们不允许您请求的操作。”错误,我不知道为什么。当我关闭csrf_protection时,表单工作正常。

甚至更奇怪的是我使用tank_auth库进行身份验证,并且还使用form_open作为登录表单。当csrf_protection打开时,我确实检查了登录表单中是否有隐藏的csrf字段,并且我能够提交表单并且没有问题登录。

关于如何调试此问题的想法?

2 个答案:

答案 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过滤,我就不需要进行全局清理。