2009-08-18 8 views
7

मुझे अंततः डेटाबेस में स्टोर करने के लिए यूयूआईडी उत्पन्न करने की आवश्यकता है। क्या मैं क्लाइंट ब्राउज़र पर जावास्क्रिप्ट से UUID उत्पन्न कर सकता हूं (There are some examples here)?क्या जावास्क्रिप्ट क्लाइंट-साइड में यूयूआईडी बनाने का कोई खतरा है?

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

(माफ करना मेरी अंग्रेजी के लिए, किसी भी व्याकरण त्रुटियों को ठीक करने के लिए स्वतंत्र महसूस)

संपादित करें: कारण है कि मैं ऐसा करना चाहते हैं के बारे में सवालों के जवाब देने के लिए, यह है क्योंकि मैं एक नई वस्तु बना सकते हैं और उस में पहचानकर्ता है जावास्क्रिप्ट और इसे मेरे दृश्य में जोड़ें और उसके बाद डेटाबेस में जोड़ने के लिए सर्वर पर AJAX कॉल करें। इस तरह, मुझे यह पता लगाने के लिए डेटाबेस से वापस लोड करने की आवश्यकता नहीं है कि यह प्राथमिक पहचानकर्ता क्या है।

+0

मुझे लगता है कि यह उपयोगकर्ताओं को आपके यूयूआईडी जनरेटर कोड को देखने के साथ एक सुरक्षा समस्या हो सकती है। सिद्धांत रूप में, मौजूदा यूयूआईडी के उदाहरण के लिए अन्य उपयोगकर्ता सत्र आईडी और ऐसे उत्पन्न करना संभव हो सकता है। –

उत्तर

9

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

अपनी यूआरएल बार देखें। मैं शर्त लगाता हूं कि 12 9 6234 इस प्रश्न की प्राथमिक कुंजी है, लेकिन मैं वास्तव में उस जानकारी के साथ कुछ भी नहीं कर सकता। आपकी लिपि के साथ वही सौदा।

+0

धन्यवाद। मैंने कुछ भी गलत नहीं किया था, लेकिन मैं यह सुनिश्चित करना चाहता था कि मैं किसी तरह के अच्छी तरह से जानबूझकर हमलों को नहीं देख रहा था। –

3

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

+0

मैं जानता हूँ कि इस सूत्र पुराने लेकिन पैदा करता है, तो आप उपयोग कर रहे पूरी तरह से idempotent बाकी कॉल बनाने के ग्राहक पर आईडी जरूरत है। एक और विकल्प सर्वर को एक नई आईडी के लिए पूछना होगा और उसके बाद आरईएसटी कॉल बनाने में उस आईडी का उपयोग करना होगा। हालांकि इसका मतलब सर्वर पर दो कॉल है। – Alkaline

+1

@Sampson मैंने कभी नहीं सोचा मैं ग्राहक की ओर एक UUID उत्पन्न करने के लिए होगा, लेकिन अब, मैं ऑफ़लाइन वेब अनुप्रयोग और क्लाइंट साइड पर उत्पन्न होने UUID में दिलचस्पी रखता हूँ उपयोग के इस मामले के लिए एकदम सही है! – Maxime

+0

आप सख्त CQS का पालन कर रहे हैं और आप आईडी अभी वापस की जरूरत है (उदाहरण के लिए एक उचित दृश्य पर रीडायरेक्ट करने), यह ऐसा करने का एक अच्छा तरीका है। – Shocked

3

क्या कोई कारण है कि आपके पास डेटाबेस उत्पन्न (वृद्धि) आईडी नहीं हो सकता है?

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

+2

भविष्य के दर्शकों के लिए यहां साइड नोट: स्वत: जेनरेटेड आईडी पर भरोसा करना बंद करें। –

2

हां। जोखिम यूयूआईडी के लिए विशिष्ट नहीं है, किसी भी क्लाइंट-साइड जेनरेट आईडी में कुछ जोखिम हैं, जो आईडी के साथ आप करते हैं। समस्या यह है कि जावास्क्रिप्ट को प्रमाणीकृत करना बहुत मुश्किल है। यदि आप क्लाइंट द्वारा जेनरेट की गई आईडी स्वीकार करते हैं, तो आप हैकर से किसी भी आईडी को स्वीकार करते हैं।

जोखिम शामिल हो सकते हैं,

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

  2. डुप्लिकेट कुंजी। सही यूयूआईडी यादृच्छिक है लेकिन कोई डुप्लिकेट कुंजी उत्पन्न कर सकता है जो आपके डेटाबेस को गड़बड़ कर देगा।

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

+0

डेटाबेस और उपयोग UUIDs से बजाय अपने आप को दसगुणा आप सत्र id तो आप किसी भी वेबसाइट पर काट दिया जाता है की पहचान हैं .. बिंदु 1 एक वैध बिंदु नहीं है। –

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