2012-05-21 6 views
6

पढ़ना OWASP CSRF prevention cheat sheet, इस प्रकार के हमलों को रोकने के लिए प्रस्तावित तरीकों में से एक सिंक्रनाइज़र टोकन पैटर्न है।क्या सीएसआरएफ टोकन के रूप में (क्रिप्टोग्राफिक रूप से मजबूत) सत्र कुकी का उपयोग करना ठीक है?

यदि सत्र टोकन क्रिप्टोग्राफ़िक रूप से मजबूत है, तो क्या यह निम्न छद्म कोड में वर्णित सीएसआरएफ टोकन के रूप में दोगुना हो सकता है?

ग्राहक:

<script> 
dom.replace(placeholder, getCookie("session-cookie")) 
</script> 

<form> 
<input type="hidden" name="csrf-cookie" value="placeholder-value"/> 
<input type="text" /> 
</form> 

सर्वर:

if(request.getParameter("csrf-cookie") != user.getSessionCookie()) 
    print "get out you evil hacker" 

कुकी उपयोगकर्ताओं गलती से अगर वे जैसे सत्र कुकी लीक से रोकने के लिए पृष्ठ लोड पर जावास्क्रिप्ट के साथ सेट कर दिया जाता पृष्ठ की एक प्रति को किसी मित्र को ईमेल करें।

+0

इस पूरे पृष्ठ को ड्रिल करने के लिए: सीएसआरएफ टोकन के रूप में सत्र टोकन का उपयोग करके [काम करेगा] (http://stackoverflow.com/a/10685148/1709587) लेकिन तात्कालिक रूप से [ओडब्ल्यूएएसपी द्वारा सलाह दी गई है] (http: //stackoverflow.com/a/10686429/1709587) क्योंकि यथार्थवादी स्थितियां मौजूद हैं जिनमें एक हमलावर उपयोगकर्ता की सीएसआरएफ टोकन को भेद्यता के माध्यम से प्राप्त कर सकता है जो * उन्हें * सत्र टोकन को सीधे प्राप्त करने की अनुमति नहीं देता है। इस तरह का परिदृश्य परवाह किए बिना एक बुरी चीज है - लेकिन यदि आप सीएसआरएफ टोकन के रूप में सत्र टोकन का पुन: उपयोग कर रहे हैं तो निश्चित रूप से सत्र टोकन से भी समझौता किया गया है, जो सख्ती से भी बदतर है। –

उत्तर

5

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

+1

यही वह है जिसे हमने भी संदेह किया, लेकिन मैं यह सुनिश्चित करना चाहता था क्योंकि इस उदाहरण के लिए मैं जिन सभी उदाहरणों को खोद सकता हूं, वे एक नया टोकन बना सकते हैं। – Erik

+4

यह इस पृष्ठ पर एकमात्र सही जवाब है। – Tower

+2

ओपी का समाधान केवल तभी काम करेगा जब httpOnly सत्र आईडी के लिए सेट नहीं है, जिसकी अनुशंसा नहीं की जाती है। –

6

नहीं, आपको सत्र सीकेआरएफ टोकन के रूप में सत्र टोकन का पुन: उपयोग नहीं करना चाहिए। OWASP CSRF रोकथाम नकल पुस्तिकाओं के कारण सत्र पहचानकर्ता का उपयोग कर के रूप में एक CSRF टोकन अवांछनीय है देता है:

हालांकि यह दृष्टिकोण क्रॉस साइट अनुरोध जालसाजी का खतरा, HTTP मानकों में प्रमाणीकृत सत्र पहचानकर्ता सहित कम करने में प्रभावी है हो सकता है सत्र अपहरण के समग्र जोखिम में वृद्धि। आर्किटेक्ट्स और डेवलपर्स को यह सुनिश्चित करना होगा कि कोई नेटवर्क उपकरण या कस्टम एप्लिकेशन कोड या मॉड्यूल स्पष्ट रूप से लॉग इन या अन्यथा HTTP पोस्ट पैरामीटर का खुलासा नहीं करते हैं।

और

HTML के भीतर सत्र पहचानकर्ता को शामिल करना भी HTTPOnly उपायों को बायपास करने क्रॉस-साइट स्क्रिप्टिंग हमलों से लाभ उठाया जा सकता है। अधिकांश आधुनिक ब्राउज़र क्लाइंट-साइड स्क्रिप्ट को HTTP केवल कुकीज़ तक पहुंचने से रोकते हैं। हालांकि, यह सुरक्षा खो जाती है यदि HTTP केवल सत्र पहचानकर्ता HTML के भीतर रखे जाते हैं क्योंकि क्लाइंट-साइड स्क्रिप्ट आसानी से ट्रैक्टर को हटा सकती है और डीओएम से पहचानकर्ता निकाल सकती है। डेवलपर्स को अभी भी इस आलेख में वर्णित सिंक्रनाइज़र टोकन पैटर्न को लागू करने के लिए प्रोत्साहित किया जाता है।

Here कुछ और विचार हैं कि सीएसआरएफ टोकन के रूप में सत्र आईडी का उपयोग करना इतना अच्छा विचार क्यों नहीं हो सकता है। This article सादे http कनेक्शन पर पैकेट स्नीफिंग का उल्लेख करता है और संभावित जोखिमों के रूप में उन पर मैन-इन-द-बीच हमलों की क्षमता का उल्लेख करता है।

इसलिए यह आवश्यक है कि सीएसआरएफ टोकन एक अलग है, अन्यथा सीएसआरएफ टोकन का अनुमान लगाया जा सकता है अगर हम मानते हैं कि हमलावर पहले ही सत्र पहचानकर्ता को जानता है! अधिक रक्षात्मक रूप से रखें: शायद आग से खेलना अच्छा विचार नहीं है: सीएसआरएफ टोकन के रूप में सत्र आईडी को पुन: उपयोग करने की कोई आवश्यकता नहीं है, ऐसा करके आप केवल एक और हमले की सतह खोलें जिसका संभावित रूप से शोषण किया जा सके। कोई पुन: उपयोग नहीं, इसके बारे में कोई चिंता नहीं।

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

आप पृष्ठ में एम्बेडेड एक स्ट्रिंग प्राप्त करने के लिए बाइट्स, हेक्स- या बेस 64-एन्कोड का अनुक्रम बनाने के लिए क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक संख्या जेनरेटर का उपयोग कर सकते हैं। OWASP 128 बिट्स की लंबाई की सिफारिश करता है जहां वे एन्ट्रॉपी के 64 बिट मानते हैं (उदाहरण के लिए 8 यादृच्छिक बाइट्स 16 बाइट हेक्स स्ट्रिंग में परिवर्तित हो जाते हैं)। उस अनुक्रम की लंबाई सुरक्षा के स्तर को निर्धारित करती है: 10 बाइट सुरक्षित यादृच्छिक संख्या (जिसमें एंट्रॉपी के 80 बिट्स हैं) अनुमान लगाते हैं संभावना 2^(- 80) के साथ सफल होता है, जो अधिकांश अनुप्रयोगों में पर्याप्त होना चाहिए। तो आपके अंतिम टोकन में 20 बाइट्स की लंबाई होनी चाहिए, एक 10 बाइट यादृच्छिक संख्या हेक्स एन्कोडिंग में परिवर्तित होनी चाहिए।

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

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