2008-09-30 21 views
9

मैं एएसपी.नेट (एमवीसी) का उपयोग कर लॉगिन सिस्टम बनाना चाहता हूं।एएसपी.नेट उपयोगकर्ता लॉगिन सर्वोत्तम प्रथाओं

इंटरनेट पर, मुझे कुछ बुरे उदाहरण मिले जो क्लिक घटनाओं में एसक्यूएल शामिल थे। अन्य जानकारी एएसपी.NET अंतर्निहित सदस्यता प्रदाता को इंगित करती है।

हालांकि, मैं अपना खुद का रोल करना चाहता हूं। मैं अंतर्निहित सदस्यता प्रदाता का उपयोग नहीं करना चाहता, क्योंकि यह केवल एमएस एसक्यूएल पर काम करता प्रतीत होता है, और मुझे अपने डेटाबेस में कुछ विदेशी टेबल रखने का विचार पसंद नहीं है।

मैं शायद कुछ के बारे में सोच सकता हूं, लेकिन मुझे सही दिशा में कुछ पॉइंटर्स चाहिए। यह उच्च सुरक्षा नहीं है, लेकिन केवल सामान्य सामान्य ज्ञान की सुरक्षा है।

  1. सिस्टम का एक बहुत एक उपयोगकर्ता तालिका में संग्रहीत सत्र आईडी है लगता है:

    और मैं कुछ प्रत्यक्ष प्रश्न हैं। मुझे लगता है कि यह अपहरण को रोकने के लिए किसी उपयोगकर्ता को एक सत्र जोड़ना है। जब भी कोई उपयोगकर्ता किसी पृष्ठ में प्रवेश करता है तो इसे जांचें? और सत्र समाप्त होने पर मैं क्या करूँ?

  2. हैशिंग, नमकीन, यह क्या करता है? मैं एमडी 5 हैशिंग के बारे में जानता हूं और मैंने इसे पहले इस्तेमाल किया है। लेकिन नमकीन नहीं।

  3. कुकीज़ के लिए सर्वोत्तम अभ्यास?

उत्तर

5

मुझे सर्वोत्तम प्रथाओं के बारे में पता नहीं है लेकिन मैं आपको बता सकता हूं कि मैं क्या करता हूं। यह सुरक्षा नहीं है लेकिन यह नौकरी करता है।

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

प्रपत्र प्रमाणीकरण वर्ग में आपके लिए ऐसा करने के लिए विधियां उपलब्ध हैं, जैसे SetAuthCookie और RedirectFromLogin। वे कुकी सेट करेंगे और उन्हें प्रमाणित के रूप में चिह्नित करेंगे। कुकी एएसपीनेट का उपयोग एन्क्रिप्टेड है। हालांकि मैं इसके सुरक्षा स्तर के लिए बात नहीं कर सकता, लेकिन यह काफी आम उपयोग में है।

मेरी कक्षा में मैं पासवर्ड चेक करते हैं और बाकी को संभालने के लिए formsauth का उपयोग करें:

if(SecurityHelper.LoginUser(txtUsername.Text, txtPassword.Text)) 
{  
    FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, true); 
} 
+1

Actaully यह नहीं करता है! यह मेरे अपने प्रमाणीकरण का उपयोग करता है और सदस्यता प्रदाता ढांचे को बिल्कुल स्पर्श नहीं करता है। मुझे यकीन है कि आपने हाल ही में मुझे इस बारे में भी कम किया है! मुझे कोई फर्क नहीं पड़ता है, लेकिन आपको एएसपीनेट कस्टम फॉर्म प्रमाणीकरण पर जांच करने की आवश्यकता है ... – mattlant

+0

जिस विधि का मैंने ऊपर उपयोग किया था, \ SecurityHelper.LoginUser मेरा स्वयं का वर्ग है जो मेरी अपनी डीबी टेबल आदि के खिलाफ अपनी जांच करता है। फॉर्मूथ विधि कुकी सेट करता है। इनमें से कोई भी सदस्यता ढांचे का उपयोग नहीं करता है। – mattlant

-1

मैं पूरे मुद्दे से बचूंगा और ओपनिड का उपयोग करूंगा। एक लाइब्रेरी उपलब्ध है जिसे आप सीधे उपयोग कर सकते हैं। Here is a link to a blog post about putting this in place

+0

करता OpenID भी ऑफ़लाइन वातावरण के लिए काम करते हैं:

asp.net साइट पर tutirials का एक अच्छा श्रृंखला रहे हैं? – IceHeat

+0

नहीं, यह नहीं होगा। –

2

आप ASP.NET बुनियादी सुविधाओं का उपयोग कर अपनी खुद की सदस्यता प्रदाता को लागू कर सकते, MSDN docs for MemberShipProvider class देखते हैं।

2

निर्मित प्रदाता अच्छी तरह से काम करता है। यह वास्तव में MySQL के साथ काम करता है, हालांकि मुझे लगता है कि यह एमएस एसक्यूएल संस्करण के रूप में सीधे आगे नहीं है। यदि आप तब उपयोग कर सकते हैं, तो यह आपको काम के घंटे बचाएगा।

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

0

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

public void SignIn(User user) 
     { 
      FormsAuthentication.SignOut(); 
      var ticket = new FormsAuthenticationTicket(1, user.UserName, DateTime.Now.AddMinutes(30), expires, alse, null); 
      var encryptedTicket = FormsAuthentication.Encrypt(ticket); 
      var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) 
      { 
       Expires = ticket.Expiration 
      }; 

      httpContextProvider.GetCurrentHttpContext().Response.Cookies.Add(authCookie); 
     } 

    public void SignOut() 
    { 
     FormsAuthentication.SignOut(); 
    } 

मैं अपने स्वयं के उपयोगकर्ता ऑब्जेक्ट और टेबल का उपयोग करता हूं। मैं अपने पासवर्ड को प्रति उपयोगकर्ता एक अद्वितीय नमक के साथ प्रयोग करने योग्य में संग्रहीत करता हूं। यह सुरक्षित है, इसे लागू करने में आसान है और यह आपके डिजाइन में फिट होगा। आपकी डेटाबेस तालिका माइक्रोस्कोफ्ट सदस्यता प्रदाता बकवास द्वारा प्रदूषित नहीं की जाएगी।

+0

आप यह सब क्यों करते हैं? क्या Forms प्रमाणीकरण.SetAuthCookie को कॉल करने पर ऐसा करने का कोई फायदा है? (जो आपने मैन्युअल रूप से मैन्युअल रूप से किया है सब कुछ करता है) – mattlant

+0

या उस मामले के लिए redirectLromLoginPage को पुनर्निर्देशित करें। वे दोनों एमएस – mattlant

+0

से सदस्यता सदस्यता का उपयोग किए बिना कुकी सेट करते हैं, मैं सदस्यता प्रदाता का उपयोग किये बिना मैन्युअल रूप से समाप्ति समय निर्धारित कर सकता हूं, मेरे स्वयं के रोल मॉडल का उपयोग कर सकता हूं। इसके अलावा, उपरोक्त कोड क्लास प्रमाणीकरणकर्ता से कॉपी-पेस्ट किया गया है: IAuthenticator इंजेक्शन httpcontext के साथ। – Paco

3

नमक जो भी हो रहा है, उसके पात्रों की एक unqiue स्ट्रिंग जोड़ने का अभ्यास है। मान लीजिए mySalt = abc123 और मेरा पासवर्ड passwd है। PHP में, मैं hashResult = md5(mySalt + password) का उपयोग करूंगा।

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

1

आप SQL सदस्यता प्रदाता में निर्मित का उपयोग कर सकते हैं - और यदि आप अपने डेटाबेस में .Net सदस्यता तालिका नहीं चाहते हैं तो आप एक समर्पित "उपयोगकर्ता पहुंच" डेटाबेस सेट कर सकते हैं - बस कनेक्शन स्ट्रिंग में निर्दिष्ट करें।

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

link text

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