2011-08-16 14 views
8

मैं mongoDB के साथ एक बोर्ड बनाने की कोशिश कर रहा हूँ।एक दस्तावेज़ आईडी के रूप में Mongodb ऑब्जेक्ट आईडी का उपयोग कर?

मैं ऑब्जेक्ट आईडी के साथ दस्तावेज़ आईडी असाइन करना चाहता हूं।

एक उपयोगकर्ता http://www.example.com/4easdf123123 द्वारा एक दस्तावेज़ पृष्ठ पर उपयोग कर सकते हैं, तो जहां "4easdf123123" एक MongoDB ObjectID है।

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

और mongoDB के साथ दस्तावेज़ आईडी असाइन करने के साथ कोई सुझाव?

+4

इसके साथ कोई समस्या नहीं दिख रही है। यह URL – Phil

+0

में जेनरेट की गई आरडीबीएमएस आईडी का उपयोग करने जैसा ही है, आप इसका उपयोग कर सकते हैं: https://github.com/treygriffith/short-mongo-id – user956584

उत्तर

8

यह मोंगोडीबी ऑब्जेक्टिड की तरह नहीं दिखता है - एक ऑब्जेक्टिड बाइनरी डेटा के 12 बाइट्स है, और जब हेक्साडेसिमल स्ट्रिंग (यूआरएल में इसका उपयोग करने का सामान्य तरीका) के रूप में प्रस्तुत किया जाता है तो यह 24 वर्ण लंबा होगा। मुझे लगता है कि आप official PHP Mongo Driver का उपयोग कर रहे हैं, इस मामले में MongoId वर्ग का कन्स्ट्रक्टर अमान्य मानों को अनदेखा कर देगा और आपके लिए एक नया उत्पन्न करेगा। किसी भी घटना में, चालक को आपके लिए ऑब्जेक्ट आईडी/MongoId उत्पन्न करना सबसे अच्छा है, क्योंकि यह ऐसा करने के लिए ऐसा करेगा जिससे टकराव से बचा जा सके।

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

+0

ठीक है मैं इसका उपयोग करूंगा :) – InspiredJW

+0

कितने अद्वितीय MongoDB ऑब्जेक्टिड बनाया जा सकता है ? क्या यह विशाल डेटा में संघर्ष की संभावना है? – InspiredJW

+0

'ऑब्जेक्ट आईडी को आपके एप्लिकेशन में समन्वय के बिना उत्पन्न होने पर भी अद्वितीय होने के लिए डिज़ाइन किया गया है। इनमें टाइमस्टैंप, मशीन आईडी, प्रक्रिया या थ्रेड आईडी का हैश और 3-बाइट वृद्धि काउंटर शामिल है। एक संघर्ष (या मशीन आईडी पर हैश टक्कर में भाग लेने के लिए) के लिए आपको एक ही प्रक्रिया/थ्रेड से 2^24, या लगभग 16 मिलियन 'ऑब्जेक्ट आईडी' बनाना होगा। यहां तक ​​कि अगर ऐसा हुआ, तो यह केवल एक मुद्दा होगा यदि 'ऑब्जेक्टआईडी' का प्रश्न उसी संग्रह में '_id' (या किसी अन्य अद्वितीय क्षेत्र में) के रूप में उपयोग किया गया था। – dcrosta

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