2012-04-27 2 views
6

PHP 사용자가 로그인 할 때 완벽하게 작동하는 PHP SDK getLoginUrl() 함수를 사용하고 있습니다. 일단 사용자가 내 페이지로 리디렉션되면 URL은 두 가지 형식, 다음 링크 하위 섹션 3에서 참조하십시오. http://developers.facebook.com/docs/authentication/server-side/페이스 북 PHP SDK - getLoginUrl() - 상태 값

반환 URL의 일부는? state = 값입니다. http://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

어떻게 :이 매개 변수 중 하나가 아닌 나는이 상태 값을 설정하지 않을 수 getLoginUrl() 메소드를 사용하여, http://developers.facebook.com/docs/reference/dialogs/oauth/

비록 :이 값은 크로스 사이트 요청 위조를 방지하기 위해 사용하도록되어 국가 가치를 활용하여 사용자를 페이스 북에 로그인하고 CSRF를 방지 할 수 있습니까?

+0

  • BaseFacebook::establishCSRFTokenState() 참조하십시오. 내가 지금하고있는 일은 다음과 같이 진행된다 : $ loginUrl = $ facebook-> getLoginUrl (array ('scope'=> 'email', 'redirect_uri'=> FACEBOOK_REDIRECT_URL)); $ _SESSION [ 'state'] = $ _SESSION [ 'fb _'. FACEBOOK_APP_ID. '_ 상태'];'. 그런 다음 사이트로 리디렉션 한 후 인증 할 때 : if ($ _ SESSION [ 'state'] == $ _REQUEST [ 'state']) {// not CSRF} – uguMark

  • 답변

    3

    그렇다면 상태 값을 사용하여 사용자를 페이스 북에 로그인하고 CSRF를 방지하려면 어떻게해야합니까?

    이것은 자동으로 PHP PHP SDK에 의해 처리되고 있습니다. 자신의 API 호출을 Facebook에 작성하려는 경우 Facebook의 OAuth 설명서에 따라 state을 수동으로 제출해야합니다 (원할 경우). 당신이 BaseFacebook::getLoginUrl()에 로그인 URL을 만들 때

    는 함수가 가장 먼저 PHP의 핵심 mt_rand(), uniqid()md5() 기능을 사용하여 CSRF 토큰 상태를 해시를 생성 1을 구축하는 것입니다 또한 세션으로 값을 저장 변하기 쉬운.

    사용자가 페이지로 다시 리디렉션되면 FBSDK는 제출 된 state이 세션의 state 값과 일치하는지 확인합니다. 값이 실제로 일치하면 이 Facebook 개체와 세션에서 지워 지므로 모든 후속 getLoginUrl() 요청에 새로운 state 변수가 적용됩니다. 2

    이론적으로 당신은 state이 이미 존재하는 경우를 모두 확인 BaseFacebook의 생성자 같이 Facebook -object를 구성하기 전에 fb_<your_app_id>_state 세션 변수에 작성하여 FBSDK와 자신의 state 값을 사용하고 establishCSRFTokenState() 수 세션.

    그러나 이것은 아마도 필요한 것보다 더 많은 복잡성을 초래할 것입니다.


    1.  

      나도이 궁금했는데 BaseFacebook::getCode()