【问题标题】:CSRF token problem with CodeIgniterCodeIgniter 的 CSRF 令牌问题
【发布时间】:2011-07-19 00:49:57
【问题描述】:

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

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

更奇怪的是,我使用 tank_auth 库进行身份验证,它还使用 form_open 作为登录表单。我确实检查以确保当 csrf_protection 开启时登录表单中有一个隐藏的 csrf 字段,并且我能够提交表单并毫无问题地登录。

关于我可以做些什么来调试这个问题的想法?

【问题讨论】:

    标签: codeigniter csrf-protection


    【解决方案1】:

    我发现了问题。在我的一个自定义库中,我有 parent::_sanitize_globals() 这显然是导致错误的原因。我在某处读到,如果我打开了 xss 过滤,我不需要对全局进行清理。

    【讨论】:

      【解决方案2】:

      首先,会话类需要一个名为“csrf_token_name”的令牌,而不是一个名为“csrf_salemarked_token$...”的令牌。

      这篇博文涵盖AJAX with CSRF Protection in Codeigniter 2.0

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

      【讨论】:

      • 嗯,我不确定我是否同意你的看法。有几件事 - 首先,csrf_token_name 是 CI 配置的一部分 - d.pr/lQHG,所以 'csrf_salemarked_token$...' 是令牌的名称。其次,我没有尝试提交任何 ajax 表单。第三,我创建表单的方式与 tank_auth 创建表单的方式相同,我进行了双重检查,两个表单都有一个带有 csrf 令牌名称和值的隐藏输入。
      • woof...您对令牌名称是正确的。不知何故,我升级时没有迁移新的配置文件
      猜你喜欢
      • 2011-09-28
      • 2016-01-31
      • 1970-01-01
      • 2014-09-25
      • 2016-07-14
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 2018-03-15
      相关资源
      最近更新 更多