使用Facebook应用程序启用csrf_protection时出现问题

时间:2011-07-24 21:41:14

标签: php facebook codeigniter csrf

大家好,
       我已经使用codeigniter实现了一个基本的Facebook应用程序。它的工作正常,直到csrf_protection = false(即禁用跨站点请求伪造)。但是当我启用跨站点请求伪造保护时,csrf_protection = true(即启用跨站点请求伪造)。它不起作用。那么如何使用csrf_protection = TRUE运行我的应用程序。

提前致谢,   ABY

1 个答案:

答案 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";
 }