2012-05-04 15 views
6

में रेल सीएसआरएफ प्रामाणिकता टोकन वाले पृष्ठों को कैसे संभालें, हमारे रेल एप्लिकेशन में, उपयोगकर्ताओं के लिए एक ही समय में कई घंटे या दिन के लिए खुले ब्राउज़र टैब खोलना आम बात है। समस्या तब होती है जब इनमें से किसी एक टैब में, उपयोगकर्ता लॉग आउट करता है, फिर वापस लॉग इन करता है (या सत्र समाप्त हो जाता है और एक नया सत्र बनाया जाता है)।रेल

यह अन्य सभी टैबों पर सीएसआरएफ प्रामाणिकता टोकन को अमान्य बनने का कारण बनता है। यदि वे किसी भी फॉर्म को सबमिट करने का प्रयास करते हैं या ताज़ा किए बिना उन टैब पर कोई AJAX अनुरोध करते हैं, तो उन्हें एक त्रुटि मिलेगी (और वास्तव में लॉग आउट हो जाएंगे क्योंकि खराब प्रमाणीकरण टोकन पास होने पर डिफ़ॉल्ट रेल व्यवहार होता है)।

यह व्यवहार स्पष्ट रूप से अवांछनीय है। मैं सोच रहा था कि लोग ऐसी परिस्थितियों को गहन तरीके से संभालने के लिए क्या करते हैं जहां उपयोगकर्ता के पास आपकी साइट पर एक विंडो खुलती है लेकिन प्रामाणिकता टोकन पुराना है।

जो मैं नहीं करना चाहता हूं वह सिर्फ उन्हें लॉगिन पृष्ठ पर रीडायरेक्ट कर रहा है, क्योंकि तब वे अपना काम खो सकते हैं, उदाहरण के लिए वे लंबे ब्लॉग पोस्ट या कुछ लिख रहे हैं।

जो समाधान दिमाग में आता है वह कुछ जावास्क्रिप्ट होना है जो या तो सर्वर को यह जांचने के लिए मतदान करता है कि प्रामाणिकता टोकन बदल गया है या सत्र की बदली गई है या नहीं, यह जांचने के लिए उपयोगकर्ता की कुकीज़ का चुनाव करें। मैंने कभी इनमें से किसी एक को करने के बारे में कभी नहीं सुना है, इसलिए मैं देखना चाहता था कि समुदाय ने क्या सोचा था।

उत्तर

3

सबसे पहले: लॉग इन/आउट/इन में एक नया सीएसआरएफ-टोकन दिखाई नहीं देगा। यह अभी भी उपयोगकर्ता की कुकी में सहेजा जाएगा। अगली बार जब यह उसी ब्राउज़र के माध्यम से लॉग इन करता है तो उसे एक ही टोकन मिल जाएगा।

रेल के नवीनतम संस्करणों में गलत टोकन के मामले में कोई त्रुटि नहीं डाली जाएगी: सभी रेल करता है - इसे नियंत्रक को पास करने से पहले सत्र को रीसेट करता है।

तो, अपने रेल अपडेट करें और आपको एक दर्द कम मिलेगा।

+0

आप सही हैं, लॉग इन/आउट नए सीएसआरएफ टोकन पीढ़ी का कारण नहीं बना रहा है। ऐसा लगता है कि यह अवैध टोकन त्रुटियां कहां से आ रही हैं, यह पता लगाने के लिए ड्रॉइंग बोर्ड पर वापस आ गया है। – Jacob

3

क्या आप वाकई सीएसआरएफ टोकन के बारे में बात कर रहे हैं और सत्र टोकन नहीं कर रहे हैं? सीएसआरएफ टोकन मेलसमूह पर लॉगिन करने के लिए रीडायरेक्ट करने के लिए यह कोई समझ नहीं आता है। आप बस उपयोगकर्ता को जो भी करने की कोशिश की दोहराने के लिए कहते हैं। (पारंपरिक वेब एप्लिकेशन में यह आम तौर पर तब होता है जब कोई फॉर्म सबमिट किया जाता है; आप सीएसआरएफ मिस्चैच को सत्यापन त्रुटि के रूप में देख सकते हैं, और फॉर्म को फिर से दिखा सकते हैं, सभी फ़ील्ड मानों को रखते हुए, और उपयोगकर्ता को पुनः सबमिट करने के लिए कह सकते हैं। अधिक AJAX में - भारी आवेदन आप प्रतिक्रिया में कुछ प्रकार के सामान्य सीएसआरएफ ध्वज का उपयोग कर सकते हैं, और यदि यह सेट किया गया है, तो उपयोगकर्ता को जो कुछ भी उसने किया (बटन दबाएं) को एक बार फिर से करने के लिए कहें, या उपयोगकर्ता को परेशान किए बिना पूरी चीज़ को स्वचालित करें।

+0

क्या आप विस्तार कर सकते हैं कि आप csrf का इलाज कैसे कर सकते हैं एक सत्यापन त्रुटि के रूप में मेल नहीं खा रहा है? क्या सामान्य रूप से ऐसा करने के लिए एक रेल-वाई तरीका है? – Jacob

+0

मैं रेल से बहुत परिचित नहीं हूं, लेकिन [यह] (https://github.com/bartt/enhanced_req uest_forgery_protection/blob/master/lib/enhanced_request_forgery_protection.rb # L64) ऐसा करने का एक तरीका प्रतीत होता है। – Tgr