0

我有一个 codeigniter 应用程序,效果很好。我创建了一个 facebook 画布应用程序,并尝试加载由 codeigniter 生成的页面。它没有用。我看到了可怕的——“你要求的行动是不允许的”。只是为了确保我的 facebook 应用程序设置正确,我尝试使用来自另一个站点的页面,并且它有效。

所以开始搜索可能的问题,我可以弄清楚这是因为cornfig设置中的CSRF protection = TRUE。所以我只是关闭了 CSRF 保护,看看是否可行。然后,它起作用了,我实际上可以通过 Facebook Canvas 应用程序加载 codeigniter 生成的页面(虽然是沙盒模式..)

一些人建议如果我们为 csrf 令牌硬编码隐藏字段(而不是依赖于 form_open() 函数)我们可以避免这个规则,并且按照这个逻辑,如果我们有一个根本没有表单的页面,应该可以正常工作。而且我什至无法加载没有表单的页面。

而且我没有在任何地方使用 AJAX。

我正在使用 CI 2.1.3。

一个相关链接 - http://ellislab.com/forums/viewthread/228160/#1038448 虽然 Stackoverflow 和其他论坛上有很多类似的问题,但我找不到满意的答案。

如果我只看到 apache 日志,我真的不觉得关闭 CSRF 保护是个好主意。

那么如何在不关闭 CSRF 保护的情况下使 codeignter 生成的页面出现在 facebook canvas 应用程序中?

任何指针都会很有用。谢谢你的时间。

4

1 回答 1

1

这个问题的根本原因是 Facebook 如何调用应用页面 iframe。默认情况下,Facebook 在 $_POST 数组中发送一个参数 (signed_request)。但是当 Codeigniter 检查 CSRF 保护时,在 post 数组中找不到 csrf 令牌。

因此,显然没有直接的解决方案。我们可以更改csrf_verify函数中的条件,system\core\Security.php以便不验证何时有 $_POST['signed_request'] 的值,但我知道这不是一个好主意。

于 2014-01-02T13:19:35.163 回答