CSRF设置问题时,创建Facebook画布应用程序的一个编码源页面


CSRF Setting issues when creating Facebook Canvas App for a Codeiginter Page

我有一个代码点火器应用程序,它运行良好。我创建了一个facebook画布应用程序,并尝试加载由代码点火器生成的页面。它不起作用。我看到了可怕的"您请求的操作是不允许的"。为了确保我的脸书应用程序设置正确,我尝试了另一个网站的页面,结果成功了。

所以我开始寻找可能的问题,我可以发现这是因为在cornfig设置中CSRF保护=TRUE。所以我只是简单地关闭了CSRF保护,看看是否有效。然后,它工作了,我可以通过Facebook Canvas应用程序加载代码点火器生成的页面(不过是沙盒模式…)

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

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

我使用的是CI 2.1.3。

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

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

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

任何指针都是有用的。谢谢你抽出时间。

这个问题的根本原因是Facebook如何调用应用程序页面iframe。Facebook默认情况下会在$_post数组中发送一个参数(signed_request)。但当Codeigniter检查CSRF保护时,在后阵列中没有发现CSRF令牌。

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