UI

2012-04-05 12 views
6

पर डेटाबेस आईडी का खुलासा करना यह वेब फ़ॉर्म-ओवर-डेटा प्रकार की चीज़ के लिए एक शुरुआती पैटर्न प्रश्न है। मैं Exposing database IDs - security risk? पढ़ा है और स्वीकार जवाब मुझे यह सोच कर कि यह समय की बर्बादी है, लेकिन प्रतीक्षा करें ...UI

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

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

आप एक वेब एप्लिकेशन कैसे बना सकते हैं जो केवल व्यापार तर्क असेंबली का संदर्भ देता है और बीएल ऑब्जेक्ट्स और GUID में वार्ता करता है जिसका केवल उस सत्र के लिए अर्थ है, जबकि असेंबली डेटाबेस आईडी का उपयोग करके लेनदेन जारी रखती है?

उत्तर

3

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

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

+0

आपने मुझे इसके बारे में सोचने के लिए बहुत कुछ दिया। क्या आप मैपिंग को कार्यान्वित करने और इसे स्टोर करने के तरीके के बारे में कोई सुझाव दे सकते हैं? एएसपी में वास्तव में सबसे अच्छा स्थान "सत्र" है? –

+0

"मैपिंग"? आप जो खोज रहे हैं उस पर स्पष्ट नहीं है। क्षेत्र संरक्षण? मैं सिर्फ सुझाव था कि आप एक एन्क्रिप्ट फ़ंक्शन करते हैं जो लेता है: फ़ील्डनाम, फ़ील्डवेल्यू, सत्र आईडी। फिर जब आप डिक्रिप्ट करते हैं तो आपको डिक्रिप्ट करने के लिए सभी 3 को भी आपूर्ति करने की आवश्यकता होती है। तो किसी अन्य सत्र में कोई भी उस मूल्य को हाइजैक करने में असमर्थ है। यूआरएल पैरामीटर के लिए आपको बस इतना ही होना चाहिए। यदि आपको कभी भी सत्र रहित पृष्ठों के लिए समर्थन की आवश्यकता है, तो आपके पास सत्र आईडी के बजाय हार्डकोडेड मान हो सकता है, सुरक्षित नहीं बल्कि सत्र रहित पृष्ठों को संवेदनशील तक कुछ भी नहीं पहुंचना चाहिए। –

+0

मैंने आपके उत्तर के क्रूक्स पर रखा, सत्र के साथ नमक: मैपिंग को स्टोर/प्रबंधित करने की कोई आवश्यकता नहीं है - वे बिल्कुल लंबे समय तक बने रहेंगे। यह कमाल का है। धन्यवाद। –

3

मैं कोई सुरक्षा विशेषज्ञ नहीं हूं, लेकिन मुझे उपयोगकर्ता को कुछ आईडी, जैसे कि उत्पाद आईडी, उपयोगकर्ता आईडी और कुछ भी सामान्य रूप से पढ़ा जा सकता है, का अर्थ है, जिसका अर्थ है कि यदि मैं कोई उत्पाद प्रदर्शित करता हूं उपयोगकर्ता, अपनी उत्पाद आईडी प्रदर्शित करना कोई समस्या नहीं है।

ऐसी चीजें जो सिस्टम के लिए आंतरिक हैं जो उपयोगकर्ता सीधे लेनदेन आईडी की तरह इंटरैक्ट नहीं करते हैं, मैं उपयोगकर्ता को प्रदर्शित नहीं करता हूं, न कि उन्हें किसी भी तरह से संपादित करने के डर में, बल्कि इसलिए कि यह जानकारी नहीं है उनके लिए उपयोगी है।

अक्सर फॉर्म में, मेरे पास "mysite.com/messages/view/5" पर कार्रवाई बिंदु होगा, जहां 5 वह संदेश है जिसे वे देखना चाहते हैं। इन कार्यों में से सभी में, मैं हमेशा यह सुनिश्चित करता हूं कि उपयोगकर्ता को यह देखने के लिए पहुंच हो (संशोधित या हटाएं, जिसे कभी कार्यक्षमता आवश्यक है), एक साधारण डेटाबेस जांच करके और लॉग इन उपयोगकर्ता संदेश स्वामी के बराबर है।

+0

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

+0

आपको उस पर _only_ पर भरोसा नहीं करना चाहिए। लेकिन आपको हैकर्स के लिए चीज़ों को आसान बनाने की आवश्यकता नहीं है। –

+0

मैंने निश्चित रूप से उन पंक्तियों के साथ सैनिटी चेक किया है: आप पंक्ति 5 से सबकुछ प्रदर्शित कर रहे हैं, जो आपको यह भी कहते हैं कि अगर आप यह भी जानते हैं कि "यह पंक्ति 5 है"। मेरी समस्या मुख्य रूप से यह थी: कि मेरे व्यूमोडल्स में मेरी बीएल वस्तुओं के लिए 1-1 है और मेरी ओआरएम इकाइयों के लिए 1-1 एक संयोग है, मैं एक सम्मेलन नहीं बनाना चाहता हूं। –

0

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

2

बहुत बहुत सावधान रहें क्योंकि पैरामीटर छेड़छाड़ डेटा संशोधन का कारण बन सकती है। इन आईडी को उजागर करते समय 'कौन से आईडी एक्सेस कर सकते हैं' पर नियम आपके आवेदन में बहुत सावधानीपूर्वक बनाए गए होंगे।

उदाहरण के लिए, यदि आप ऑर्डर आईडी पर आधारित ऑर्डर अपडेट कर रहे हैं, तो लोड और अपडेट के लिए अपने कहां में शामिल करें: जहां order.orderid = passInOrderId और ऑर्डर।ग्राहक आईडी =

मैं MVC में संग्रहीत आईडी उपलब्ध यहाँ के साथ मदद करने के लिए एक विस्तार विकसित:

http://mvcsecurity.codeplex.com/

इसके अलावा, मैं इस बारे में बात पर मेरी सुरक्षा पाठ्यक्रम में एक सा: Hack Proofing your ASP.NET MVC and Web Forms Applications

+0

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

+0

अच्छा सुझाव, और यह बीएल में अनुमति/भूमिका जांच करेगा, जहां यह वास्तविक आईडी में संचालित होता है। –

1

उन प्रतिक्रियाओं के अलावा, कभी कभी यह स्पष्ट पहचान-पत्र का उपयोग करें ताकि लोगों को जानकारी वे चाहते हैं के लिए यूआरएल को हैक कर सकते हैं अच्छा है। उदाहरण के लिए, www.music.com \ कलाकार \ एसीडीसी या www.music.com \ arist \ smashing-pumpkins। यदि यह आपके उपयोगकर्ताओं के लिए सार्थक है और यदि आप जानकारी को बढ़ा सकते हैं तो उपयोगकर्ता यूआरएल के माध्यम से पृष्ठ से समझता है तो बेहतर होगा और खासकर यदि आपका बाजार खंड युवा या तकनीकी समझदार है तो आईडी को अपने लाभ के लिए उपयोग करें। यह आपके एसईओ को भी बढ़ावा देगा। मैं कहूंगा कि इसका उपयोग कब नहीं किया जाता है, फिर इसे एन्कोड करें। यह केवल एक डेवलपर को एक सत्र के खिलाफ ग्राहक आईडी की जांच न करने के लिए एक गलती लेता है और आप अपने पूरे ग्राहक आधार का पर्दाफाश करते हैं।

लेकिन जाहिर है, अपने इकाई परीक्षण है कि पकड़ने चाहिए!

+0

यह सोचने की एक और बात है - या तो जानकारीपूर्ण और सुगम या अस्थायी और अर्थहीन अच्छा है, लेकिन मुझे लगता है कि डीबी से विरासत में मिला है क्योंकि यह नहीं है; किसी भी प्रकार के लिए मैपिंग को वास्तव में कार्यान्वित करने के लिए कोई सुझाव? उपयोगकर्ता के अनुकूल के लिए डीबी में बस एक कॉलम, मुझे लगता है कि –

+0

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