2011-07-24 58 views
1

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

由于提前, 奥比

+0

感谢@i_forget之前,我编辑了我的问题 – insomiac

回答

0

当你建立Facebook的请求,你ussually有URI这样的......

// 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 [ '代码'])

// 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"; 
} 
相关问题