8

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

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

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

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

4

2 回答 2

2

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

这篇博文介绍了 Codeigniter 2.0 中带有 CSRF 保护的 AJAX

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

于 2011-03-20T14:44:29.583 回答
1

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

于 2011-03-20T17:14:34.033 回答