2015-03-21 8 views
8

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

असल में, मैं एक नौसिखिया नौसिखिया हूं। मैंने प्रमाणीकरण के बारे में कुछ लेख पढ़े हैं लेकिन सारणीबद्ध पुस्तकालयों के साथ सबसे अधिक सौदा (वे इंजन, मध्यम बर्तन, आदि के बारे में बात करते हैं) जो मुझे ज्यादा समझ में नहीं आता है। मैं वास्तव में निम्न स्तर के विवरण की तलाश में हूं।

यहाँ मैं अब तक क्या पता है ..

मैं कुकीज़ और सत्र के बारे में पता है। कुकीज क्लाइंट-साइड पर स्ट्रिंग्स हैं जो एकाधिक HTTP अनुरोधों में सत्र बनाए रखने के लिए उपयोग की जाती हैं।

यहाँ प्रमाणीकरण के अपने बुनियादी समझ है (कृपया मुझे ठीक कर लें मैं गलत हूँ):

  1. जब उपयोगकर्ता लॉग करता है, हम सर्वर से एसएसएल एन्क्रिप्टेड अनुरोध भेजें। यदि प्रमाण-पत्र मान्य हैं, तो हम उपयोगकर्ता आईडी से जुड़े मान्य सत्र आईडी के रूप में डेटाबेस (या किसी अन्य डेटा स्टोर) पर सत्र आईडी नामक यादृच्छिक स्ट्रिंग को सहेजते हैं। यह सत्र आईडी उपयोगकर्ता के प्रत्येक लॉगिन/लॉगआउट के लिए बदलती है।

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

यहाँ मेरी प्रश्न हैं:

  1. मुझे लगता है कि डिफ़ॉल्ट रूप से रेल 2 से शुरू पढ़ा है, यह अब CookieStore (SessionStore के बजाय) जो SHA512 साथ सत्र हैश उत्पन्न (बजाय का उपयोग करता है सत्र आईडी के), और यह सब एक कुकी पर संग्रहीत किया जाता है जिसका अर्थ है कि एकाधिक उपयोगकर्ता आईडी का सचमुच एक ही सत्र हैश हो सकता है और यह ठीक काम करेगा। ऐसा लगता है कि यह एक बहुत ही खतरनाक चीज है, सर्वर पर संग्रहीत एक गुप्त कुंजी के साथ बड़ी संख्या में हैश का पर्दाफाश करना और इस कुंजी के आधार पर अपनी संपूर्ण प्रमाणीकरण प्रणाली को आधार देना। क्या कोई वास्तविक दुनिया बड़े पैमाने पर एप्लिकेशन है जो सर्वर साइड सत्र आईडी को संग्रहीत करने के बजाय हैशिंग का उपयोग करता है?

  2. सर्वर के पक्ष में सक्रिय सत्र आईडी को संग्रहीत करने के विषय पर, मैंने यह भी पढ़ा है कि आप रेल के लिए विभिन्न प्रकार के सत्र संग्रहण का उपयोग करने के लिए स्विच कर सकते हैं। इस पर आधारित, मैंने सिस्टम के रूप में प्रमाणीकरण सिस्टम को सिस्टम के रूप में और ऑथ टोकन का उपयोग करने के बारे में सुना है। एक लेख टोकन क्या है और यह सत्र आईडी से अलग कैसे है?

  3. ऐसा लगता है कि मैं मौजूदा सत्र को पकड़ने के लिए एक यादृच्छिक स्ट्रिंग (दोनों हैशिंग और सर्वर साइड सत्रों के लिए) अनुमान लगा सकता हूं। क्या इसके खिलाफ सुरक्षा करने का कोई तरीका है? क्या कुकी पर संग्रहीत अधिक मूल्यों का उपयोग करना सामान्य है?

मैं जानता हूँ कि मैं एक बहुत पूछ रहा हूँ, लेकिन मेरा मानना ​​है कि यह मेरे जैसे लोग हैं, जो प्रमाणीकरण समझ में नहीं आता है और बहुत हो जाएगा के लिए उपयोगी हो सकता है (जैसे उपयोगकर्ता नाम, असली नाम या प्रमाणीकरण के लिए भी एक और हैश के रूप में) विषय के बारे में एक ठोस नींव पाने के लिए उपयोगी है।

+0

यह एक बहुत अच्छा सवाल है, और डेविस की अस्पष्टता लंबे समय से हमारी कंपनी में गोद लेने के लिए बाधा रही है। इस बारीकी से पालन करेंगे। – Drenmi

+0

जेनरेट किया गया हैश केवल उपयोगकर्ता के विशेषताओं पर लॉग इन नहीं है। i.ei. आप एक डुप्लिकेट SHA1 हैश उत्पन्न नहीं कर सका। –

उत्तर

2

मुझे लगता है कि डिफ़ॉल्ट रूप से रेल 2 से शुरू पढ़ा है, यह अब CookieStore (SessionStore के बजाय) जो सत्र (सत्र आईडी के बजाय) SHA512 साथ हैश उत्पन्न करता है का उपयोग करता है, और यह सब एक पर संग्रहीत है कुकी जिसका अर्थ है कि एकाधिक उपयोगकर्ता आईडी का शाब्दिक रूप से सत्र हैश हो सकता है और यह ठीक काम करेगा। ऐसा लगता है कि यह एक बहुत ही खतरनाक चीज है, जिसमें सर्वर पर संग्रहीत एकल गुप्त कुंजी है और इस कुंजी के आधार पर आपके पूरे प्रमाणीकरण प्रणाली को आधारित करने के साथ बड़ी संख्या में हैश का खुलासा किया गया है।

हाँ, यह पहली बार धुंधला लगता है, लेकिन मुझे यकीन नहीं है कि वास्तव में खतरे क्या है। रेल 4 में, सत्र डेटा पीबीकेबीएफ 2 का उपयोग करके एन्क्रिप्ट किया जाता है, और उसके बाद आपके सत्र रहस्य के साथ पर हस्ताक्षर किए जाते हैं। यह हस्ताक्षर यह पता लगाने में मदद करता है कि एन्क्रिप्टेड सत्र की सामग्री छेड़छाड़ की गई है और यदि सर्वर छेड़छाड़ का पता लगाता है तो सर्वर सत्र को अस्वीकार कर देगा।

https://cowbell-labs.com/2013-04-10-decrypt-rails-4-session.html

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

क्या कोई वास्तविक दुनिया बड़े पैमाने पर एप्लिकेशन है जो सर्वर साइड सत्र आईडी को संग्रहीत करने के बजाय हैशिंग का उपयोग करता है?

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

सर्वर साइड पर सक्रिय सत्र id के भंडारण के विषय पर, मैं भी पढ़ा है आप रेल के लिए सत्र भंडारण के विभिन्न प्रकार का उपयोग करने के लिए स्विच कर सकते हैं। इस पर आधारित, मैंने सिस्टम के प्रमाणीकरण सिस्टम को सेवाओं के रूप में और ऑथ टोकन का उपयोग करने के बारे में सुना है। टोकन क्या है और यह सत्र आईडी से अलग कैसे है?

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

ऐसा लगता है कि मैं मौजूदा सत्र को पकड़ने के लिए एक यादृच्छिक स्ट्रिंग (दोनों हैशिंग और सर्वर साइड सत्रों के लिए) अनुमान लगा सकता हूं। क्या इसके खिलाफ सुरक्षा के लिए कोई रास्ता है? क्या कुकी पर संग्रहीत अधिक मूल्यों का उपयोग करना सामान्य है?

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

मुझे सच में नहीं लगता कि कुकीज का उपयोग करने के लिए प्रमाणीकरण स्थिति जारी रखने के लिए बहुत अधिक विकल्प है (मुझे लगता है कि अगर आप विदेशी महसूस कर रहे हैं और विरासत ब्राउज़र समर्थन के बारे में ज्यादा परवाह नहीं करते हैं तो HTML5 स्थानीय संग्रहण काम करेगा)।

+0

आह .. यह समझ में आता है, भूल गया है कि यह वास्तव में हैश को एन्क्रिप्ट करता है जो इसे और अधिक कठिन बनाता है। मैं अभी भी टोकन आधारित ऑथ बनाम सत्र आईडी पर थोड़ा उलझन में हूं। आपकी व्याख्या से, मुझे लगता है कि आप टोकन आधारित प्रमाणीकरण का जिक्र कर रहे हैं? तो टोकन आधारित और बस कहीं भी संग्रहीत सत्र आईडी का उपयोग करने के बीच क्या अंतर है (यह सत्र सत्र में भी मैप किया गया है?) – maru

+0

"सत्र टोकन" मैं जिस बारे में बात कर रहा था वह सर्वर-साइड "कुंजी" है जिसका उपयोग सत्र पर हस्ताक्षर करने के लिए किया जाता है। प्रमाणीकरण के लिए, आप आमतौर पर सत्र में कुछ प्रकार के उपयोगकर्ता आईडी स्टोर करते हैं, जो या तो हस्ताक्षरित कुकी होगी, या कुकी में संग्रहीत सत्र कुंजी का उपयोग करके सर्वर पक्ष होगा। –

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