2009-11-04 17 views
10

मैं एमवीसी को एक एएसपी.NET एप्लिकेशन पोर्ट कर रहा हूं और एक ऑटिनेटेड उपयोगकर्ता से संबंधित दो वस्तुओं को स्टोर करने की आवश्यकता है: भूमिकाओं की एक सूची और दृश्य आइटम आईडी की एक सूची, यह निर्धारित करने के लिए कि उपयोगकर्ता क्या देख सकता है या नहीं देख सकता है।उपयोगकर्ता भूमिकाएं - सत्र में क्यों स्टोर नहीं करते?

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

ए) यह डब्ल्यूएसई के समान लेकिन अलग-अलग समस्याओं से ग्रस्त है जिसमें इसे बहुत ही सीमित तरीके से उपयोग किया जाना चाहिए परीक्षण लिखने के लिए भी मुश्किल है;

बी) RolesProvider के लिए एकमात्र कैशिंग विकल्प कुकीज़ पर आधारित है जिसे हमने सुरक्षा आधार पर खारिज कर दिया है;

सी) इसमें जटिलताओं और अतिरिक्त अवांछित सामान का कोई अंत नहीं है;

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

http://blogs.sans.org/appsecstreetfighter/2009/06/14/session-attacks-and-aspnet-part-1/

मैं बाईं सोच है कर रहा हूँ लगता है यह बहुत आसान काम करने का कोई आसान तरीका नहीं है, लेकिन मुझे विश्वास करना असंभव लगता है।

किसी को भी कर सकते हैं:

क) कैसे ASP.NET MVC सत्र सुरक्षित बनाने के लिए पर सरल जानकारी प्रदान करते हैं, जैसा कि मैंने हमेशा माना है कि वे कर रहे थे?

बी) ऊपर वर्णित अनुसार एक जटिल दुःस्वप्न को प्रतिस्थापित किए बिना उपयोगकर्ता की भूमिकाओं में लॉग इन करने के लिए इन दो स्ट्रिंग चर को स्टोर करने का एक और आसान तरीका सुझाता है?

धन्यवाद।

उत्तर

0

एसएसएल का उपयोग करने के लिए एक सुरक्षित कनेक्शन बनाने का एकमात्र तरीका है। उससे कम कुछ भी, और आपको केवल "सुरक्षित" होने पर मूल्यांकन करना होगा।

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

सत्र चर स्वयं इस अर्थ में पूरी तरह से सुरक्षित है कि यह कभी भी सर्वर को तब तक नहीं छोड़ देता जब तक कि आप इसे विशेष रूप से प्रतिक्रिया में कॉपी न करें।

+0

मुझे कहना चाहिए था, हम एसएसएल का उपयोग करते हैं, इसलिए कोई समस्या नहीं है। इसके अलावा हमें सत्रों को पुनः प्राप्त करने में कोई समस्या नहीं है, इसलिए मैं इसके बारे में चिंतित नहीं हूं। – Phil

+0

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

+0

के सुझाए गए तरीकों में से कोई भी बनाने में असमर्थ रहा हूं, मैं जानना चाहूंगा कि वे हैकर के रूप में मेरे स्पष्ट रूप से कम कौशल पर भरोसा करने के बजाय क्यों नहीं। अगर मुझे उस पर भरोसा था तो मुझे लगता है कि हमने समस्या हल कर ली है लेकिन अब तक मैं नहीं हूं। – Phil

0

क्या आपने एमवीसी में एक कस्टम प्राधिकृत टैग स्थापित करने पर विचार किया है। मैंने इसका एक और उदाहरण question में दिया।

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

0

क्या आप क्लाइंट स्तर पर कार्यों तक पहुंच को नियंत्रित करने की कोशिश कर रहे हैं? यही कारण है कि मैं क्लाइंट साइड फ़ंक्शंस को नियंत्रित करने के लिए भूमिकाओं और वस्तुओं का पर्दाफाश करता हूं।

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

4Guys दिखाता है कि भूमिकाओं के साथ कार्यों को कैसे नियंत्रित किया जाए।

0

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

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

चिपचिपा सत्र असमान लोड संतुलन का कारण बन सकते हैं, शायद स्केल करने में सक्षम होने के मूल्य को कम कर सकते हैं।

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

0

मेरा स्पष्ट सवाल यह है कि आप सत्र में उपयोगकर्ताओं की भूमिका क्यों स्टोर करना चाहते हैं?

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

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

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

इसके अलावा, कृपया संलग्न डेमो आवेदन अपने ब्लॉग http://blogs.bootcampedu.com/blog/post/Reply-to-httpstackoverflowcomquestions1672007user-roles-why-not-store-in-session.aspx

7

एक सर्वर-साइड सत्र में उपयोगकर्ता की भूमिका के बारे में जानकारी भंडारण एक सत्र का अपहरण कर लिया नहीं जा सकता है प्रदान करने के लिए सुरक्षित है के अंत में रखा देखते हैं। इसे अधिक व्यापक रूप से पुन: स्थापित करना, इससे कोई फ़र्क नहीं पड़ता कि प्रमाणीकृत सत्र अपहृत होने पर उपयोगकर्ता भूमिका की जानकारी कहाँ संग्रहीत की जाती है।

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

  1. URL में एम्बेडेड सत्र आईडी स्वीकार न करें।

  2. क्रॉस साइट स्क्रिप्टिंग खतरों को खत्म करने पर अपना समय फ़ोकस करें यानी सभी उपयोगकर्ता द्वारा प्रदत्त डेटा स्कैन करें और निष्पादन योग्य जावा स्क्रिप्ट को पार्स करें।

  3. पूरा डोमेन के लिए जारी करना कुकीज़ (जैसे myapp.mydomain.com)

  4. होस्ट एक उच्च वर्ग DNS ऑपरेटर पर अपने डोमेन उदा एक जो केवल प्रीसेट रिमोट आईपी पते से DNS परिवर्तनों को अनुमति देता है।

  5. लगातार सत्र कुकीज़ जारी न करें।

  6. किसी सत्र कुकी को पुन: जारी करें यदि कोई लॉगिन पृष्ठ पर आता है, जो किसी प्रमाणित सत्र से पहले से जुड़े सत्र आईडी के साथ आता है।

  7. बेहतर अभी भी, सफल प्रमाणीकरण पर हमेशा एक नई सत्र कुकी जारी करें और पूर्व सत्र को छोड़ दें। (इस IIS में विन्यस्त किया जा सकता है?)

0

बस एक सुझाव है, आप इस छोटे पुस्तकालय विचार कर सकते हैं:

http://www.codeproject.com/KB/aspnet/Univar.aspx

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

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