2011-09-07 12 views
5

मैंने कुछ खोज की और मुझे कुछ भी नहीं मिला जो मेरी समस्या से संबंधित था।फेसबुक लॉगिन के साथ समस्या CSRF राज्य टोकन से मेल नहीं खाती

मैं वर्तमान में अपनी वेबसाइट पर एक फेसबुक लॉगिन लागू करने की कोशिश कर रहा हूं और मुझे htaccess mod rewrite URL के कारण लॉगिन प्रमाणीकरण में समस्याएं आ रही हैं?

कोड पूरी तरह से काम करता है और मैं अगर मैं इसे पसंद आधुनिक पुनर्लेखन नियमों के बिना उपयोग करने में लॉग इन करें:

domain.com/view_webhosting.php?webhosting=name 

लेकिन जैसे ही मैंने आधुनिक पुनर्लेखन यूआरएल

domain.com/webhosting-name/ 

के लिए खत्म हो जाना फिर यह काम नहीं करता है और एक त्रुटि फेंकता है "सीएसआरएफ राज्य टोकन प्रदान किए गए किसी से मेल नहीं खाता है।"

htaccess फ़ाइल यह इस

RewriteRule ^webhosting-([a-z_0-9-]+)/$ /view_webhosting.php?webhosting=$1 [L] 

किसी तरह लग रहा है में

इस तरह की एक समस्या का समाधान है? मैं फेसबुक एसडीके v3.1.1

उत्तर

7

पीएचपी एसडीके उम्मीद 'राज्य' फ़ील्ड $ _REQUEST में होना (मैं के रूप में विश्वास करते हैं एक जीईटी पैरा) रीडायरेक्ट के बाद आप एक्सेस टोकन के लिए 'कोड' का आदान-प्रदान कर सकते हैं। base_facebook.php से:

protected function getCode() { 
    if (isset($_REQUEST['code'])) { 
    if ($this->state !== null && 
     isset($_REQUEST['state']) && 
     $this->state === $_REQUEST['state']) { 

     // CSRF state has done its job, so clear it 
     $this->state = null; 
     $this->clearPersistentData('state'); 
     return $_REQUEST['code']; 
    } else { 
     self::errorLog('CSRF state token does not match one provided.'); 
     return false; 
    } 
    } 

    return false; 
} 

आपका फिर से लिखना है कि परम पर stomping जा सकता है।

2

का उपयोग कर रहा हूं मुझे लगता है कि आप PHP एसडीके का मतलब है?

लगता है जैसे आप 'PHP' अनुरोध चर को अपनी PHP स्क्रिप्ट में नहीं पारित कर रहे हैं। क्या आपने https://developers.facebook.com/docs/authentication/ पढ़ा है (विशेष रूप से बिट्स और सीएसआरएफ से स्वयं की रक्षा कर रहे हैं?)।

इसके अलावा, मुझे लगता है इससे आपके प्रश्न का में कोई गलती है, लेकिन आपका रीराइट नियम नहीं होना चाहिए:

RewriteRule ^webhosting-([a-z_0-9-]+)/$ /view_webhosting.php?**webhosting**=$1 [L] 
+0

हैलो mrtom हाँ क्षमा करें कि सिर्फ एक टाइप है, मुझे लगा कि जब मैं इसे अंग्रेजी में अनुवादित करता हूं तो इसे पढ़ना आसान होगा :) उदाहरण का उपयोग कर रहा हूं https://github.com/facebook/php-sdk/blob/master/examples/ example.php और सीएसआरएफ सुरक्षा के बारे में कुछ भी नहीं है? यह फेसबुक एपीआई पूरी जगह पर विभिन्न कोड के साथ अजीब है। लेकिन यह mod rewrite url का उपयोग नहीं करते समय ठीक से काम करता है ... – John

1

RewriteRule ^webhosting-([a-z_0-9-]+)/$ /view_webhosting.php?webhosting=$1 [L,QSA] 

QSA = क्वेरी स्ट्रिंग जोड़ने के लिए अपने फिर से लिखना बदलने का प्रयास करें। यह सुनिश्चित करता है कि आप अपने जीईटी पैराम न खोएं।

7

धन्यवाद बिस्मार्क।

आप सही थे; यह GET पैरामीटर नहीं मिल सका, और समाधान यह था:

RewriteRule ^webhosting-([a-z_0-9-]+)/$ /view_webhosting.php?webhosting=$1 [QSA,L] 

से

RewriteRule ^webhosting-([a-z_0-9-]+)/$ /view_webhosting.php?webhosting=$1 [L] 

लिए क्वेरी स्ट्रिंग संलग्न [QSA]

•'qsappend|QSA' (query string append) 
This flag forces the rewrite engine to append a query string part of the substitution string 
to the existing string, instead of replacing it. Use this when you want to add more data 
to the query string via a rewrite rule. 

धन्यवाद लोग , मुझे सही रास्ते पर रखो!

+1

यदि बिस्मार्क सही है, तो जवाब स्वीकार करना या कम से कम वोट देना अच्छा होता है। मैंने आपके प्रश्न को वोट देने के लिए आपको थोड़ा सा प्रतिनिधि देने के लिए वोट दिया है। – Fionnuala

+0

हैलो रेमो, आप बिल्कुल सही हैं, मैं इस वेबपृष्ठ के लिए नया हूं इसलिए मुझे नहीं पता था कि मैं वोट दे सकता हूं या जवाब स्वीकार कर सकता हूं :) – John

0

अगर किसी को भी .htaccess फ़ाइल के बाद यह त्रुटि मिलती है तो मैं PHP फ़ाइल पर रीडायरेक्ट_री पैरामीटर के साथ-साथ फेसबुक एप सेटिंग्स पर साइट यूआरएल को बदलने का सुझाव दूंगा।

मैं पर अनुमतियों के लिए एक आवेदन से गुंजाइश/अनुमतियाँ अप मैच के लिए

http:domain.com/folder/index.php

-1

मैं द्वारा (भूल) इस तय करने के लिए

http:domain.com/folder

से बदल रहा है इस त्रुटि हल developers.facebook.com/app पृष्ठ ... (यानी गोटो ऐप सेटिंग्स, अनुमतियां)।

+1

आप थोड़ा और विशिष्ट होना चाहते हैं। –

0

फेसबुक एसडीके कोड जब एक ही हैंडलर में दो बार टोकन के खिलाफ जाँच एक बग है।

मैं इस तरह facebook.php की getCode समारोह संपादित:

protected function getCode() { 
    if (!isset($_REQUEST['code']) || !isset($_REQUEST['state']) || $this->state === null) { 
     return false; 
    } 
    if ($this->state === $_REQUEST['state']) { 
     // CSRF state has done its job, so clear it 
     $this->state = null; 
     $this->clearPersistentData('state'); 
     return $_REQUEST['code']; 
    } 
    self::errorLog('CSRF state token does not match one provided.'); 

    return false; 
} 

अधिक स्पष्ट होना और अमान्य टोकन नहीं बताता है, तो दो बार कहा जाता है।

एक ही URL हैंडलर पर दो बार स्पष्ट समारोह कहा जा सकता है होना करने के लिए करता है, तो उदाहरण के लिए:

$facebook->getUser(); और उसके बाद ही हैंडलर $facebook->getLogoutUrl() में तो getCode() दो बार इस प्रकार कहा जाता है में और अवैध त्रुटि संदेश परिणामस्वरूप

संबंधित मुद्दे