使用CodeIgniter的CSRF令牌问题

使用CodeIgniter的CSRF令牌问题,codeigniter,csrf-protection,Codeigniter,Csrf Protection,我在CodeIgniter中遇到了一个非常奇怪的CSRF保护问题。我已确保使用form_open启动我的表单,配置文件中的csrf_protection设置为true,并且我还确保隐藏的csrf名称和值字段与csrf cookie匹配,如下所示: 当我提交表单时,会出现“遇到错误。您请求的操作是不允许的。”错误,并且不确定原因。当我关闭csrf_保护时,表单工作正常 更奇怪的是,我使用tank_auth库进行身份验证,它还使用form_open作为登录表单。我做了检查,以确保当csrf_保护打开

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

当我提交表单时,会出现“遇到错误。您请求的操作是不允许的。”错误,并且不确定原因。当我关闭csrf_保护时,表单工作正常

更奇怪的是,我使用tank_auth库进行身份验证,它还使用form_open作为登录表单。我做了检查,以确保当csrf_保护打开时,登录表单中有一个隐藏的csrf字段,并且我能够提交表单并顺利登录


思考如何调试此问题?

首先,会话类需要一个名为“csrf\u token\u name”的令牌,而不是一个名为“csrf\u token$…”的令牌

这篇博文包括


Tank_auth从隐藏的输入表单字段而不是cookie中获取令牌。您的AJAX请求需要从隐藏字段(如果可用)获取令牌,如果没有表单,则需要从cookie获取令牌。

我发现了问题。在我的一个自定义库中,我有一个父库::_sanitize_globals(),这显然是导致错误的原因。我在某个地方读到,如果我打开了xss过滤,我就不需要执行“消毒全局”。

hmmm,我不确定我是否同意你的看法。首先,csrf_token_name是CI配置的一部分,因此“csrf_salemarked_token$…”是令牌的名称。第二,我不想做任何ajax表单提交。第三,我创建表单的方式与tank_auth创建表单的方式相同,我进行了双重检查,两个表单都有一个带有csrf令牌名称和值的隐藏输入。。。关于令牌名称,你是对的。我升级时没有迁移新的配置文件