大家好,
我已经使用codeigniter实现了一个基本的Facebook应用程序。它的工作正常,直到csrf_protection = false(即禁用跨站点请求伪造)。但是当我启用跨站点请求伪造保护时,csrf_protection = true(即启用跨站点请求伪造)。它不起作用。那么如何使用csrf_protection = TRUE运行我的应用程序。
提前致谢, ABY
答案 0 :(得分:0)
当你向facebook建立一个请求时,你通常会喜欢这些...
// If you want to enable CSRF, you can build some unique state and save it to session
$csrf_state = md5(uniqid(rand(), TRUE));
$this->session->set_userdata('fb_csrf_state', $csrf_state);
$dialog_url = 'http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($redirect_url)
. "&scope=publish_stream,user_about_me,user_birthday"
. "&state="
. $csrf_state;
如果你启用了CSRF,那么ussualy你需要在会话中保存$ crsf_state以上,然后再将用户重定向到Facebook,然后检查来自Facebook的返回请求(与$ _GET ['code']一起)
// Then you can inspect the CSRF state
if($this->session->userdata('fb_csrf_state') == $_REQUEST['state'])
{
// This request valid, process...
}
else
{
// CSRF not valid, give user a warning
echo "You may be a CSRF victim, please try again";
}