【问题标题】:CSRF Setting issues when creating Facebook Canvas App for a Codeiginter Page为 Codeiginter 页面创建 Facebook 画布应用程序时的 CSRF 设置问题
【发布时间】:2013-09-07 14:57:00
【问题描述】:

我有一个 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 应用中?

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

【问题讨论】:

    标签: php facebook codeigniter facebook-apps csrf


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 2013-11-09
      • 2012-09-15
      相关资源
      最近更新 更多