2011-09-15 34 views
11

मैं सिर्फ सेटअप अपने आवेदन में एक साधारण CSRF संरक्षण है। यह एक अनूठा टुकड़ा बनाता है जिसे एक फॉर्म जमा करने पर सत्र मूल्य के विरुद्ध मान्य किया जाता है।सीएसआरएफ टोकन - ठीक से कैसे कार्यान्वित करें?

दुर्भाग्यवश इसका मतलब है कि अब मैं अपने आवेदन के कई उदाहरण (ब्राउज़र में टैब) को एक साथ खोल नहीं सकता क्योंकि सीएसआरएफ crumbs एक दूसरे के साथ टकराते हैं।

क्या मुझे प्रत्येक वास्तविक रूप के लिए एक व्यक्तिगत टोकन बनाना चाहिए या मेरे सभी रूपों के लिए पारस्परिक, साझा टुकड़ा का उपयोग करना चाहिए? यहां सामान्य ज्ञान क्या है?

उत्तर

5

आप या तो कर सकते हैं। यह आपके इच्छित सुरक्षा के स्तर पर निर्भर करता है।

ओडब्ल्यूएएसपी एंटरप्राइज़ सिक्योरिटी एपीआई (ईएसएपीआई) प्रति उपयोगकर्ता सत्र विधि में एकल टोकन का उपयोग करता है। यह शायद एक बहुत ही प्रभावी तरीका है मानते हुए कि आपके पास कोई XSS छेद नहीं है और आपके पास उचित रूप से लघु सत्र टाइमआउट हैं। यदि आप सत्र या सप्ताह के लिए सत्रों को जिंदा रहने की अनुमति देते हैं, तो यह एक अच्छा दृष्टिकोण नहीं है।

व्यक्तिगत रूप से, मुझे प्रत्येक रूप के प्रत्येक उदाहरण के लिए एक अलग टोकन का उपयोग करना मुश्किल नहीं लगता है। मैं कुंजी-मूल्य जोड़े के साथ उपयोगकर्ता के सत्र में एक संरचना संग्रहीत करता हूं। प्रत्येक आइटम की कुंजी फॉर्म की आईडी है, मान एक और संरचना है जिसमें टोकन और उस टोकन के लिए समाप्ति तिथि शामिल है। आम तौर पर मैं केवल टोकन को 10-20 मिनट तक रहने की इजाजत देता हूं, फिर यह समाप्त हो जाता है। लंबे रूपों के लिए मैं इसे एक लंबी समाप्ति समय दे सकता हूं।

यदि आप एक ही सत्र में एकाधिक ब्राउज़र टैब में एक ही फॉर्म का समर्थन करने में सक्षम होना चाहते हैं, तो मेरी विधि एक छोटी सी चालबाजी बन जाती है लेकिन अभी भी अद्वितीय फॉर्म आईडी प्राप्त करके आसानी से किया जा सकता है।

+0

आपका मतलब है, प्रत्येक प्रपत्र के प्रत्येक उदाहरण में इसका अपना टोकन है? अर्थात। '<इनपुट प्रकार =" छुपा "नाम =" टोकन_फॉर्म-पंजीकरण # 3 "मूल्य =" गुप्त "/>'? – Industrial

+4

मुझे लगता है कि प्रति सत्र एक टोकन उचित है जब तक कि आप उन्हें http (केवल https) पर सबमिट न करें। वे सत्र आईडी के साथ कई सुरक्षा चिंताओं को साझा करते हैं। यदि आपके पास एक्सएसएस है, तो हमलावर iframes खोल सकता है, टोकन पढ़ सकता है, और सीएसआरएफ को वैसे भी कर सकता है। – Erlend

+0

यदि आपके पास एक्सएसएस है, तो आप पहले ही खो चुके हैं। अतिरिक्त प्रति-फॉर्म नॉन आपको सहेज नहीं पाएंगे (हमलावर ताजा नॉन के साथ एक नया फॉर्म प्राप्त करने में सक्षम होगा, इसे भरें और जमा करें, जैसे उपयोगकर्ता होगा)। सीएसआरएफ के लिए प्रति उपयोगकर्ता एकल मूल्य बिल्कुल पर्याप्त है। – Kornel

1

सबसे पहले: मैं कोई सुरक्षा विशेषज्ञ नहीं हूं, इसलिए आपको शायद जो भी कहना है उस पर भरोसा नहीं करना चाहिए।

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

+3

क्षमा करें, लेकिन यदि आपके पास एक्सएसएस है, तो हमलावर बस दिए गए फॉर्मों के लिए iframes खोल सकता है और उन्हें टोकन पढ़ सकता है। यदि आपके पास एक्सएसएस है, टोकन दृष्टिकोण विफल रहता है, और यह XSS से बचने के लिए डबल सबमिट कुकी दृष्टिकोण के लिए है। – Erlend

-3

मैं CSRF के बारे में जानते हैं, आप उपयोग कर सकते

1) रैंडम संख्या है और यह सत्र में सहेजें:
छिपा बुलाया छिपा इनपुट करने के लिए यह करें, फिर जब आप जानकारी recive आप छिपा क्षेत्र के साथ जांच कर सकते हैं सत्र मूल्य

2) स्टेटिक config चर (पिछले लेकिन कोई सत्र की तरह)
छिपी हुई फ़ील्ड इस मूल्य (config से चर) शामिल होंगे। जब आप को मान्य, आप छिपा पोस्ट और config सुरक्षा कुंजी मान

3) HTTP Referer की जाँच करेगा
आप HTTP संदर्भ का उपयोग कर सकते पता करने के लिए जहां उपयोगकर्ता तब से आते हैं असली डोमेन के साथ की जाँच (इस विधि कर सकते हैं अगर आपकी वेबसाइट में xss है तो हमला करें)।

मुझे पता है के रूप में आप किसी भी समाधान :)

+1

आपका दूसरा उदाहरण; सीएसआरएफ टोकन के रूप में एक स्थिर चर का उपयोग करके आप कैसे सुझाव दे सकते हैं? टोकन के पीछे पूरा विचार उनकी विशिष्टता है, जिसका अर्थ यह है कि किसी को भी अनुमान लगाने में सक्षम होना चाहिए कि टोकन क्या होगा। धरती पर यह कैसे किसी भी रूप को सुरक्षित बनाएगा? – Industrial

+1

2 काम नहीं करता है, क्योंकि कुंजी प्रति उपयोगकर्ता व्यक्तिगत नहीं है। 3 की सिफारिश नहीं की जाती है क्योंकि कई कंपनियां फायरवॉल रेफरर हेडर को बाहर निकालती हैं, और यह वास्तव में अविश्वसनीय है। – Erlend

+0

सीएसआरएफ को हराने के लिए HTTP रेफरर सुरक्षित तरीका नहीं है। (न तो एक स्थिर चर है।) –

4

OWASP Cheat Sheet बात की इस तरह के लिए सर्वाधिक स्पष्ट जवाब है उपयोग कर सकते हैं। यह विभिन्न दृष्टिकोणों और सुरक्षा बनाम प्रयोज्यता के संतुलन पर चर्चा करता है।

संक्षेप में वे प्रति (ब्राउज़र) सत्र में एक ही टोकन होने की सलाह देते। आपके मामले में दूसरे शब्दों में टैब के बीच एक ही टोकन साझा किया जाता है। धोखा शीट यह भी जोर देती है कि साइट साइट स्क्रिप्टिंग भेद्यता को पार करने के लिए अपनी साइट का खुलासा करना बहुत महत्वपूर्ण है, क्योंकि यह प्रति सत्र सीएसआरएफ टोकन रणनीति को घटा देता है।

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