2011-01-19 16 views

उत्तर

22

हां, कॉच डीबी अनधिकृत पढ़ने को रोक सकता है। दुर्भाग्य से, यह थोड़ा कम सरल है।

एक गुप्त नीलामी आवेदन की कल्पना करो। आपने $ 20 बोली लगाई और मैंने $ 10 बोली लगाई; एक सोफे दस्तावेज़ में प्रत्येक बोली। सोफे हमें अपने स्वयं के बोली दस्तावेज पढ़ने देता है लेकिन कोई अन्य नहीं। हालांकि, औसत दिखा रहा है एक नक्शा-कम दृश्य है। मैं दृश्य लोड करता हूं और देखता हूं कि औसत $ 15 है, इसलिए मैंने निष्कर्ष निकाला है कि आपकी बोली $ 20 है और मैंने सुरक्षा नीति तोड़ दी है। देखें आउटपुट कुछ या सभी दस्तावेज़ों की जानकारी को रिसाव कर सकता है। दस्तावेज़ स्तर पर सुरक्षा लागू करना संभव नहीं है। यही कारण है कि पढ़ने का उपयोग डेटाबेस स्तर पर है।

मुझे पता है, यह बेकार है। लेकिन यह एकमात्र सही, स्केलेबल उत्तर है।

यह सोफे दर्शन का कारण है कि कई डेटाबेस — प्रति उपयोगकर्ता भी एक (या अधिक!) बनाते हैं। किसी डेटाबेस को पढ़ने की अनुमति डेटाबेस _security ऑब्जेक्ट के मान में सेट है। (CouchDB ट्रंक में नोट, क्षेत्र readers was renamed to members क्योंकि यह भी निर्दिष्ट करता है जो डीबी के लिए लिख सकते हैं।)

तकनीक इस तरह काम करता है:

  1. प्रत्येक उपयोगकर्ता के लिए एक डेटाबेस बनाएँ। यह उपयोगकर्ता द्वारा पढ़े जा सकने वाले सभी दस्तावेज रखेगा। _security ऑब्जेक्ट में उपयोगकर्ता (या उपयोगकर्ता की भूमिका) जोड़ें।
  2. मास्टर डेटाबेस में, एक फ़िल्टर फ़ंक्शन बनाएं जो पढ़ने नीति लागू करता है। (यह validate_doc_update के साथ कोड साझा कर सकता है।)
  3. ?filter=my_filter_function के साथ उपयोगकर्ता डेटाबेस में मास्टर डेटाबेस से प्रतिलिपि बनाएँ।
  4. उपयोगकर्ता को अपने डेटाबेस को लोड (या प्रतिलिपि) करने की अनुमति दें।

बेशक, यह एक शुद्ध सोफे एप्लिकेशन के लिए है, जहां उपयोगकर्ता सीधे सोफे तक पहुंचते हैं। यदि आपके पास एक मध्यम परत (एमवीसी नियंत्रक, या सिर्फ एक रिवर्स HTTP प्रॉक्सी) है, तो आप उपयोगकर्ता और सोफे के बीच नीति को लागू कर सकते हैं। लेकिन सावधान रहें। उदाहरण के लिए, _show फ़ंक्शन या _rewrite नियम किसी उपयोगकर्ता को आपकी नीति के बावजूद दृश्य या दस्तावेज़ लोड करने की अनुमति दे सकता है।

शुभकामनाएं!

+0

धन्यवाद! क्या आप विस्तार कर सकते हैं कि कैसे _show और _rewrite मुझे काट सकता है? साथ ही, मैं दौड़ की परिस्थितियों से कैसे बचूं जैसे कि "किसी को अपरिचित करें -> फोटो अपलोड करें" और 100% सुनिश्चित करें कि असभ्य व्यक्ति उस फ़ोटो को कभी नहीं देख सकता है? – nornagon

+0

ठीक है, मान लीजिए कि आपके पास एक रिवर्स प्रॉक्सी है जो URL पर आधारित प्रति उपयोगकर्ता प्रति दस्तावेज़ तक पहुंच/अस्वीकार करती है। बाद में, आप _list फ़ंक्शन का उपयोग करके एक नई सुविधा जोड़ते हैं और प्रॉक्सी द्वारा सभी _list प्रश्नों की अनुमति है। एक उपयोगकर्ता यह पता लगा सकता है कि दस्तावेज़ों को देखने के लिए _list का उपयोग कैसे करें, उसे नहीं करना चाहिए। इसी तरह, एक _rewrite नियम सामान्य '/ db/doc_id' पथ के बिना दस्तावेज़ देखने का एक तरीका प्रदान कर सकता है। तो आपको * बहुत * यह सुनिश्चित करना होगा कि आपके प्रॉक्सी में कोई छेद नहीं है। – JasonSmith

+2

आपका दूसरा प्रश्न ** निरस्त करने के बारे में अधिक ** ** पढ़ने की पहुंच ** ** पढ़ने की पहुंच से पढ़ने की पहुंच है। मैं आपको एक नया सवाल पूछता हूं ("कोच डीबी सुरक्षा मॉडल में पढ़ने की पहुंच को कैसे रद्द करें")। अगर मैं कर सकता हूं तो मैं एक जवाब पर एक शॉट ले जाऊंगा! – JasonSmith

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