2013-08-09 5 views
12

मेरे पास वर्तमान में मेरे पृष्ठ पर फॉर्म हैं, जो इस पर ध्यान दिए बिना कि उपयोगकर्ता लॉग इन है या नहीं। एक बार जब उपयोगकर्ता लॉग इन करता है, तो उन्हें इन रूपों में से एक के साथ प्रस्तुत किया जाता है (जो सीएसआरएफ का उपयोग करते हैं)।प्रमाणीकरण पर सीएसआरएफ को पुन: उत्पन्न/अमान्य करना बंद करें

समस्या यह है कि यदि यह बॉक्स प्रमाणीकरण के बाद प्रस्तुत किया जाता है, तो सीएसआरएफ टोकन को अवैध कर दिया जाता है।

CSRF टोकन अमान्य है: मैं अपने आप को प्रमाणीकरण की जांच और $form->isValid() रिटर्न true जबकि प्रवेश के बाद बिना प्रपत्र प्रस्तुत करने के लिए अनुमति देकर इस की पुष्टि की है, यह मेरे की त्रुटि के साथ false देता है। फॉर्म को पुनः सबमिट करने का प्रयास करें। पुनः/अमान्य CSRF प्रमाणीकरण पर टोकन, हटाने CSRF इन रूपों से टोकन या प्रमाणीकरण के बाद मेरे फ़ॉर्म तैयार से Symfony रोक (मैं नहीं बल्कि इससे बचने चाहते हैं तथापि,) -

मुझे लगता है कि तीन समाधान कर रहे हैं। मेरा वर्तमान समाधान प्रमाणीकरण के साथ एक नया सीएसआरएफ टोकन वापस पास करना है और फॉर्म टोकन input मान सेट करना है।

अतिरिक्त: क्या किसी को पता है कि वर्तमान में असाइन किए गए सभी सीएसआरएफ टोकन को कैसे देखना है? सत्र उन्हें पकड़ने के लिए प्रतीत नहीं होता है।

+0

पृष्ठ लॉगिन के बाद पुनः लोड नहीं होता है? – lsouza

+0

@ हिसामु नो, लॉगिन AJAX का उपयोग करके किया जाता है, इसलिए उपयोगकर्ता लॉग इन करता है और फिर मैं सफल लॉगिन पर एक फॉर्म खोलता हूं। यह वह बिंदु है जहां टोकन अवैध हो जाते हैं (प्रतीत होता है)। अगर मुझे पता था कि सभी टोकन कहां देखना है, तो मैं इसे और अधिक डीबग करने में सक्षम हूं। – Prisoner

+0

शायद आप अन्य टोकन पुन: उत्पन्न कर सकते हैं? देखें: http://stackoverflow.com/a/11632713/209585 – lsouza

उत्तर

0

मुझे this CWE पर इंगित करने के लिए @ मार्कफॉक्स के लिए धन्यवाद - हालांकि मुझे पता था कि यह डिज़ाइन के माध्यम से था, मुझे उम्मीद थी कि मेरे द्वारा समाप्त किए गए मार्ग पर जाने से बचने का एक तरीका होगा।

रुचि किसी के लिए, CWE राज्यों:

एक उपयोगकर्ता प्रमाणित कर रहा है, या अन्यथा एक नया उपयोगकर्ता सत्र स्थापित करने, किसी भी मौजूदा सत्र पहचानकर्ता अमान्य बिना एक हमलावर प्रमाणीकृत सत्र चोरी करने के लिए अवसर देता है।

इस कारण से, मैं अनुशंसा करता हूं कि आप जिस मार्ग को समाप्त कर चुके हैं, उसे नीचे जाएं, नया request tokens via AJAX भेजकर उन्हें प्रासंगिक रूपों में रखें।

0

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

लेकिन अगर तुम सच में ऐसा करने के लिए नहीं करना चाहते, आप ने कहा:

मेरे वर्तमान समाधान एक नया CSRF टोकन प्रमाणीकरण के साथ वापस पारित करने के लिए और सेट रूपों इनपुट मूल्य टोकन है।

बस ऐसा करें। उसके साथ कुछ भी गलत नहीं है।

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