MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB जनरेट किए गए _ids को गुप्त डेटा के रूप में उपयोग करना (उदा., OAuth टोकन)

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

. से बने हैं
a 4-byte timestamp, 
a 3-byte machine identifier, 
a 2-byte process id, and 
a 3-byte counter, starting with a random value.

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

यदि टाइमस्टैम्प का अनुमान लगाया जा सकता है और मशीन आईडी निर्धारित करने योग्य है (जो तब तक है जब तक कि आपके पास एक बड़ा क्लस्टर न हो), केवल पांच बाइट शेष हैं। कई जेनरेट की गई आईडी को देखकर, मैं शायद इसे 50 प्रक्रियाओं को कम कर सकता हूं ताकि प्रभावी एन्ट्रॉपी 28 बिट रेंज में कहीं भी हो। इसका अनुमान लगाना अभी भी कठिन है, लेकिन यह एक एक्सेस टोकन के लिए बहुत जोखिम भरा है।

इसके बजाय क्रिप्टोग्राफिक रूप से मजबूत छद्म यादृच्छिक संख्या जनरेटर का उपयोग करें और उससे एक टोकन बनाएं। उदाहरण के लिए, .NET में, RNGCryptoServiceProvider मनमाने ढंग से लंबाई यादृच्छिक डेटा बनाने की अनुमति देता है।

एक विचार के रूप में, मैं दो कारणों से आपके OAuthTokens के चारों ओर एक अतिरिक्त क्रिप्टोग्राफ़िक आवरण रखने का सुझाव देता हूँ:

a) आप अमान्य टोकन को शीघ्रता से निर्धारित करने में सक्षम होना चाहते हैं। एक वैध क्रिप्टोग्राफिक शेल में अभी भी एक अमान्य टोकन (एक निरस्त या समाप्त अनुदान) शामिल हो सकता है, लेकिन आपको हर बार ब्रूट फोर्स हमलों पर डेटाबेस को हिट करने की आवश्यकता नहीं है। साथ ही, ग्राहक

बी) ग्राहक बार-बार टोकन का अनुरोध कर सकते हैं। हालांकि यह एक आवश्यकता नहीं है, मुझे पता है कि लगभग सभी प्रणालियां हर बार अलग-अलग टोकन लौटाती हैं (चाहे वे स्वयं-सत्यापन कर रहे हों या नहीं)। आमतौर पर, ऐसा इसलिए होता है क्योंकि टोकन की वैधता अवधि सीमित होती है। यह वही वैधता अवधि नहीं है जो OAuth अनुदान के पास है।

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मुझे अपनी मोंगोडब सेवा कैसे पंजीकृत करनी चाहिए जो मोंगो क्लाइंट, सिंगलटन या स्कोप का उपयोग करती है?

  2. अभी और दी गई तारीख के बीच का अंतर

  3. मोंगोडब गणना क्वेरी--संचयी गुणन

  4. एक ही आदेश के साथ क्वेरी और सम्मिलित करें

  5. नेवला ऑटो वेतन वृद्धि