2010-06-04 14 views
22

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

मेरा एप्लिकेशन एक वेबपृष्ठ पर चलता है। मेरे पास एप्लिकेशन स्थापित है, लॉगिन बटन वाला लॉगिन बॉक्स है, और यदि विवरण सही हैं तो यह अंतर्निहित यूआई लोड करेगा और लॉगिन बॉक्स को हटा देगा।

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

भी वेब ऐप के भीतर लॉगआउट बटन जानकारी को हटा देगा कुकी में और आपको लॉगिन पेज पर ले जाएं (कुकी जानकारी हटाएं और आपको वेबपृष्ठ के लॉगिन हिस्से में भेज दें)।

या कोई अलग दृष्टिकोण होगा।

उत्तर

62

मैं कहेंगे आप लगभग यह अधिकार मिल गया:। डी यहाँ कैसे मैं अपने आवेदन में प्रवेश करें/लॉगआउट संभाल है:

  1. उपयोगकर्ता पृष्ठ लोड करता है - यदि उसके पास टोकन (अधिक जानकारी के लिए अगले बिंदु देखें) के साथ एक कुकी सेट है, तो सर्वर पर टोकन भेजें ताकि यह जांच सके कि यह अभी भी वैध है या नहीं। यदि यह मान्य है, तो आप लॉग इन हैं, 5 बिंदु पर जाएं। अमान्य टोकन को संभालने के तरीके के नीचे नीचे दिए गए नोट देखें।
  2. उपयोगकर्ता उपयोगकर्ता/पास संयोजन इनपुट करता है। यह जानकारी सर्वर को भेजी जाती है (इसे एन्क्रिप्टेड कनेक्शन पर भेजना सबसे अच्छा होगा, लेकिन जीडब्ल्यूटी के साथ हासिल करना मुश्किल है - उदाहरण के लिए, this question देखें)।
  3. सर्वर जांचता है कि उपयोगकर्ता/पासवर्ड हैश (नीचे देखें) डेटाबेस में जो कुछ भी है/उसके साथ संयोजन मिलान करता है। यदि ऐसा है, तो यह टोकन उत्पन्न करता है (केवल कुछ यादृच्छिक, बल्कि लंबी स्ट्रिंग, UUID की तरह) और इसे क्लाइंट को वापस भेजता है।
  4. यदि उपयोगकर्ता ने लॉगिन के दौरान "मुझे याद रखें" चेकबॉक्स चेक किया है, तो भविष्य में समाप्ति तिथि के साथ कुकी में टोकन स्टोर करें (अनुशंसित समय अवधि के अनुसार अन्य मार्गदर्शिका/प्रश्न देखें)।
  5. जब क्लाइंट टोकन प्राप्त करता है, तो उसे के लिए प्रत्येक अनुरोध के लिए उपयोग करना चाहिए, जिसे आप केवल प्रमाणित उपयोगकर्ताओं को निष्पादित करना चाहते हैं। वहां, सर्वर चेक करता है कि टोकन मान्य है (आपको अपने डीबी में टोकन (ओं)/उपयोगकर्ता जोड़े का ट्रैक रखना होगा) और यदि ऐसा है, तो लेनदेन/जो कुछ भी अधिकृत करें। यहां पकड़ है: यदि आप कुकी पर केवल पर भरोसा करते हैं, तो आप a XSRF attack पर कमजोर होंगे। यही कारण है कि अनुरोध के हिस्से के रूप में आपको टोकन को भी पास करना चाहिए (कुकी को स्वचालित रूप से स्थानांतरित किया जाता है - यही कारण है कि एक एक्सएसआरएफ हमला संभव है) (आप जानते हैं, जेएसओएन में एक अतिरिक्त क्षेत्र या पीओजेओ में एक फ़ील्ड जैसे आप जीडब्ल्यूटी- आरपीसी या यहां तक ​​कि HTTP शीर्षलेख में)।
  6. स्पष्ट लॉगआउट ("लॉगआउट" लिंक आदि पर क्लिक करके), सर्वर को एक सूचना भेजें कि इस उपयोगकर्ता ने अभी लॉग आउट किया है। सर्वर को टोकन को हटा/अमान्य करना चाहिए। इसे "मुझे याद रखें" विकल्प के बावजूद यह करना चाहिए - चूंकि स्पष्ट लॉगआउट का अर्थ है कि उपयोगकर्ता उस पीसी/ब्राउज़र पर लॉगिन जानकारी को हटाना चाहता है और दूसरों को लॉग इन करने से रोकता है।यदि उपयोगकर्ता ब्राउज़र/पेज को बंद कर देता है और आपने कुकी 4 को सही ढंग से सेट किया है (यानी, यह ब्राउज़र पर बंद नहीं होगा - फिर, केवल अगर "मुझे याद रखें" विकल्प चुना गया था), अगली बार यात्रा करें उपयोगकर्ता स्वचालित रूप से बिंदु में लॉग-इन किया जाना चाहिए 1.

कुछ अतिरिक्त नोट्स

  • यह बहुत महत्वपूर्ण है: सर्वर साइड पर जाँच करने के लिए याद करता है, तो टोकन कुकी के माध्यम से पारित एक बराबर होती है अनुरोध/पेलोड के हिस्से के रूप में पारित किया गया।
  • पासवर्ड को सादा पाठ-स्टोर हैंश के रूप में अपने डेटाबेस में पासवर्ड स्टोर न करें। अधिकतम सुरक्षा के लिए बीसीआरपीटी का प्रयोग करें। यही कारण है कि मैंने लिखा है कि आपको पासवर्ड हैश की तुलना करना चाहिए, वास्तविक पासवर्ड नहीं।
  • जब सर्वर एक अवैध टोकन का सामना करता है, तो इसका अर्थ यह हो सकता है कि - सामान्य से अलर्ट करने के लिए। आम तौर पर, इन स्थितियों को लॉग करना अच्छा होता है और नियमित रूप से किसी भी असामान्य गतिविधि के लिए लॉग की जांच करता है।
    1. उपयोगकर्ता एक looong समय के लिए साइट नहीं का दौरा किया था और टोकन समाप्त हो गई है। सुनिश्चित करें कि आप क्लाइंट साइड पर टोकन समाप्ति को सही तरीके से संभालते हैं (कुकीज पर सही समाप्ति तिथियों के परिणामस्वरूप उपयोगकर्ता को समाप्त होने वाले टोकन को भेजे बिना लॉगिन पृष्ठ पर रीडायरेक्ट किया जा रहा है) और सर्वर साइड (एक विशेष कार्य जो दैनिक टोकन सूची स्कैन करता है और हटा देता है ? अवधि समाप्त हो वाले)
    2. शायद तुम टोकन सत्यापन पर कुछ अन्य प्रतिबंध डाल दिया है - टोकन की तरह और वर्तमान प्रयास एक ही आईपी एक के रूप में टोकन मूल रूप से तैयार की गई है से होना चाहिए समाप्त नहीं हो सकती के लिये।
    3. जब अनुरोध भेजने और यह विकृत आया वहाँ एक त्रुटि थी/भ्रष्ट - इस बारे में ज्यादा कुछ नहीं कर सकता है, लेकिन प्रवेश पृष्ठ
    4. एक तृतीय-पक्ष का उपयोग करने में लॉग इन करने की कोशिश कर रहा है करने के लिए उपयोगकर्ता अनुप्रेषित एक हस्तशिल्प टोकन। यदि आप टोकन अनुमान लगाने के लिए बेवकूफ रूप से आसान उपयोग करते हैं (जैसे उपयोगकर्ता नाम, rot13, अपने सुपर-स्पेशल-भयानक "एन्क्रिप्शन" आदि के आधार पर) तो आप इसे जल्द या बाद में काट लेंगे। यूयूआईडी एक अच्छे टोकन उम्मीदवार का एक उदाहरण है - जैसा कि नाम का तात्पर्य है, यह सार्वभौमिक अद्वितीय पहचानकर्ता है - जिसका अर्थ है कि दो उपयोगकर्ताओं के पास समान यूयूआईडी नहीं होनी चाहिए और यूयूआईडी स्वयं यादृच्छिक और लंबे समय तक हैं। AJAX अनुप्रयोगों में

सुरक्षा गंभीर व्यवसाय है - मैं आसान के साथ भी कई वेब अनुप्रयोगों देखा है सुरक्षा ख़ामियों का शोषण करने के लिए ... यह समझने का पूरी तरह से क्या है और आप क्यों कर रहे हैं सुनिश्चित करें। आप किसी भी प्रश्न हैं, तो :)


अद्यतन 2015/06/12 पूछने के लिए संकोच नहीं करते:GWT - Security RPC XSRF

+2

इस जवाब भी मुझे मदद मिली है, आया के रूप में यह मुझ में प्रवेश में अंतर्दृष्टि दे दी है सुरक्षित रूप से, चीयर्स igor – molleman

+7

+1 यह उत्तर सुरक्षा अकसर किये गए सवाल से अधिक प्रबुद्ध था। यदि आप इस बारे में ब्लॉग कर सकते हैं, तो शायद मैं कुछ अच्छा नमूना कोड के साथ ब्लॉग कर सकता हूं :-)। – helpermethod

+1

आपको इसके बारे में अपने ब्लॉग में लिखना चाहिए (शायद कुछ उदाहरण कोड के साथ)। सत्रों पर अंतिम संदर्भ होगा :-)। – helpermethod

4

Here आप जीडब्ल्यूटी में लॉगिन सुरक्षा के बारे में कुछ जानकारी पा सकते हैं। वहाँ भी कैसे याद करने के लिए है कि एक उपयोगकर्ता में लॉग इन किया है कुकीज़ का उपयोग करने के लिए पर एक अनुभाग है

+0

धन्यवाद इस में बहुत आसान – molleman

1

यहाँ एक सबसे अच्छा लिंक जो मैं के माध्यम से आया (पूरा implementation के साथ) है। एक कुकी को बनाए रखने के साथ एक पूर्ण लॉगिन चक्र (sessionId)।

यह बहुत अच्छा होगा यदि आप एक विकल्प कहा जाता है "Remember me"

Session Management in GWT

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