【问题标题】:problem while using enabled csrf_protection with Facebook Application将启用的 csrf_protection 与 Facebook 应用程序一起使用时出现问题
【发布时间】:2011-10-12 04:50:56
【问题描述】:

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

提前致谢, aby

【问题讨论】:

  • 感谢@i_forget,我已经编辑了我的问题

标签: php facebook codeigniter csrf


【解决方案1】:

当你向 facebook 发起请求时,你通常会有这样的 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,那么通常您需要在会话中保存高于 $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";
 }

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多