2012-10-30 37 views
9

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

मैं सेवा-आधारित वेबपैप पर काम कर रहा हूं और मुझे आश्चर्य है कि क्या है उपयोगकर्ता लॉगिन को संभालने का सबसे अच्छा तरीका। अब तक मेरे पास है:

  1. जब उपयोगकर्ता लॉगिन करते हैं, तो वे क्रेडिटियल की आपूर्ति करते हैं। पासवर्ड को नमक और स्थानीय रूप से धोया जाता है, यह पोस्ट पर सर्वर पर संचारित होने की तुलना में होता है (इसलिए उपयोगकर्ताओं को स्नीफिंग करने के लिए मूल पासवर्ड प्राप्त करने में सक्षम नहीं होंगे यानी उन्हें अन्य साइटों पर जांचने में सक्षम नहीं होंगे)
  2. टीटीएल के साथ कुकी में लॉग इन और हैश पासवर्ड संग्रहीत किया जाता है 15 मिनट (प्रत्येक एकल वेबैक्शन को निरस्त कर दिया गया)
  3. पासवॉड सर्वर-साइड नमकीन है और फिर से धोया गया है, और इसकी तुलना डेटाबेस में संग्रहीत पासवर्ड से की जाती है (इसलिए, पासवर्ड अलग-अलग नमक के साथ डबल शेड होते हैं, यह किसी ऐसे व्यक्ति के लिए होता है जो टूट जाएगा डेटाबेस में - वे अभी भी लॉगिन क्रेडिट पुनर्प्राप्त करने में सक्षम नहीं होंगे)
  4. उपयोगकर्ता एकल आईपी
  5. से प्रति 5 मिनट में अधिकतम 3 लॉगिन प्रयासों पर कर सकता है उपयोगकर्ताओं को अंतिम सफल और unsu के बारे में जानकारी मिलती है तारीख और आईपी के साथ साथ ccessful लॉगिन प्रयास

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

उत्तर

11

कुकी के रूप में हैश किए गए पासवर्ड को संग्रहीत करना बहुत ही कमजोर भेद्यता है और OWASP Violation है। पासवर्ड को हश करने में पूरा बिंदु यह है कि आप हमलावर को लॉगिन करने के लिए हैश को तोड़ने के लिए मजबूर कर रहे हैं। हमलावर सिर्फ डेटाबेस से हैश खींच सकते हैं और उसके बाद के लिए लॉग इन हैं, तो आप एक प्रणाली है कि सादे पाठ में पासवर्ड भंडारण के बराबर है।

प्रत्येक प्लेटफ़ॉर्म में सत्र हैंडलर होता है, PHP में केवल session_start() और $ _SESSION सुपर ग्लोबल का उपयोग करें। अपना खुद का सत्र हैंडलर लिखकर आप कम सुरक्षित रहेंगे।

+0

मैं पासवर्ड फिर से सर्वर सर्वर से फिर से कर रहा हूं। डेटाबेस में डबल हैश पासवर्ड है, इसलिए आपको सिंगल-हैश पासवर्ड नहीं मिल सकता है, जो लॉगिन – PiotrK

+3

@PiotrK के लिए आवश्यक है, यह अभी भी एक भयानक विचार है, अपना स्वयं का सत्र हैंडलर न लिखें। – rook

+0

मैं संभव के रूप में सामान्य रूप में मेरी समस्या का वर्णन करने के लिए समुदाय के लिए उपयोगी बनना चाहता था - लेकिन स्थिति कुछ अलग है: मैं ग्राहक के रूप में फ्लैश का उपयोग कर रहा है और यह HTTP कॉल करने और सादा XML में डेटा प्राप्त होने की। मैं मानक सत्र का उपयोग नहीं कर सकता, क्योंकि मेरे पास मेरे कोड में GET या COOKIE नहीं है।मैं केवल फ्लैश क्लाइंट द्वारा "कुकी" के रूप में रखे गए चरों को संदर्भित करता हूं, क्योंकि वे इस तरह व्यवहार करते हैं। यही कारण है कि मैं PHP सत्र हैंडलर का उपयोग नहीं कर सकता और मुझे अपना खुद का लिखना है :) – PiotrK

4

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

और आप अलग-अलग सत्रों से आसानी से गतिविधि को अलग कर सकते हैं, इसलिए यदि आप कंप्यूटर में इसे खोलते हैं तो आप अपना पासवर्ड बदलने के बिना सत्र को मार सकते हैं, और अन्य सत्रों में कोई फर्क नहीं पड़ता।

0

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