2012-04-27 16 views
6

मैं PHP एसडीके getLoginUrl() फ़ंक्शन का उपयोग कर रहा हूं जो उपयोगकर्ता को लॉग इन करने के लिए पूरी तरह से काम करता है। एक बार जब उपयोगकर्ता को मेरे पृष्ठ पर रीडायरेक्ट किया जाता है, तो URL दो रूपों में आ सकता है, निम्न लिंक उपखंड 3: http://developers.facebook.com/docs/authentication/server-side/फेसबुक PHP एसडीके - getLoginUrl() - राज्य मूल्य

वापसी URL का हिस्सा एक? राज्य = मान है। getLoginUrl() विधि का उपयोग कर मैं एक राज्य मान सेट कभी नहीं कर सकते हैं के रूप में यह मापदंडों से एक नहीं है http://developers.facebook.com/docs/reference/dialogs/oauth/

हालांकि,: http://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

तो कैसे यह मान क्रॉस साइट रिक्वेस्ट फोर्जरी को रोकने के लिए इस्तेमाल किया जा माना जाता है क्या मैं उपयोगकर्ता को फेसबुक में लॉग इन करने और सीएसआरएफ को रोकने के लिए राज्य-मूल्य का उपयोग कर सकता हूं?

+0

मैं यह भी सोच रहा है देखते हैं। मैं अब कुछ कर रहा हूं: (मुझे यकीन है कि यह एक बेहतर और सही तरीका है) '$ loginUrl = $ facebook-> getLoginUrl (सरणी ('स्कोप' => 'ईमेल', 'redirect_uri' => FACEBOOK_REDIRECT_URL)); $ _SESSION ['state'] = $ _SESSION ['fb _'। FACEBOOK_APP_ID।'_ state ']; '। फिर रीडायरेक्ट के बाद आपकी साइट पर रीडायरेक्ट करते समय: 'अगर ($ _ सत्र [' राज्य '] == $ _REQUEST [' state ']) {// सीएसआरएफ} ' – uguMark

उत्तर

3

तो मैं उपयोगकर्ता को फेसबुक में लॉग इन करने और सीएसआरएफ को रोकने के लिए राज्य-मूल्य का उपयोग कैसे कर सकता हूं?

यह स्वचालित रूप से फेसबुक पीएचपी एसडीके द्वारा नियंत्रित किया जा रहा है। यदि आप अपने अपने एपीआई को फेसबुक पर कॉल करने वाले थे, तो आपको फेसबुक के OAuth दस्तावेज के अनुसार state मैन्युअल रूप से (यदि वांछित) सबमिट करना होगा।

जब आप BaseFacebook::getLoginUrl() साथ एक लॉगिन यूआरएल बनाने के लिए, पहली बात यह है समारोह करता पीएचपी के मुख्य mt_rand(), uniqid() और md5() कार्यों का उपयोग कर CSRF टोकन राज्य है, जो एक हैश बनाता है स्थापित करने के लिए है और यह भी एक सत्र के रूप में मूल्य संग्रहीत करता है चर।

जब उपयोगकर्ता को आपके पृष्ठ पर रीडायरेक्ट किया जाता है, तो एफबीएसडीके चेक करता है कि सबमिट state सत्र में state मान से मेल खाता है। यदि मान वास्तव में मेल खाते हैं, stateFacebook ऑब्जेक्ट से और सत्र से साफ़ किया गया है, इसलिए सभी getLoginUrl() अनुरोधों को एक नया state चर मिलेगा।

सैद्धांतिक रूप से आप FBSDK के साथ अपने स्वयं state मूल्य fb_<your_app_id>_state सत्र चर करने के लिए इसे लिखने Facebook -object निर्माण करने से पहले से, BaseFacebook के निर्माता के रूप में इस्तेमाल कर सकते हैं और establishCSRFTokenState() दोनों की जाँच करता है, तो पहले से ही state में मौजूद है सत्र।

लेकिन यह संभवतः आवश्यकतानुसार अधिक जटिलता पेश करेगा।

 


  1. BaseFacebook::establishCSRFTokenState()
  2. देख BaseFacebook::getCode()
संबंधित मुद्दे