2012-03-21 12 views
6

में स्थिर फ़ाइलों तक पहुंच प्रतिबंधित करना मैं एक ऐसी प्रणाली का निर्माण कर रहा हूं जो उपयोगकर्ताओं को दस्तावेज़ उत्पन्न करने और फिर उन्हें डाउनलोड करने की अनुमति दे। दस्तावेज पीडीएफ हैं (यह नहीं कि यह इस प्रश्न के लिए महत्वपूर्ण है) और जब वे उत्पन्न होते हैं तो मैं उन्हें अपने स्थानीय फाइल सिस्टम पर संग्रहीत करता हूं कि वेब सर्वर यूयूआईडी फाइल नामों के साथ चल रहा हैDjango/Nginx

c7d43358-7532-4812- b828-b10b26694f0f.pdf

लेकिन मैं जानता हूँ कि "अस्पष्टता के माध्यम से सुरक्षा" सही समाधान ...

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

मैं Nginx/Django/Gunicorn/EC2/S3

कुछ अन्य समाधान क्या हैं उपयोग कर रहा हूँ?

उत्तर

3

दृश्य स्तर पर user==owner लागू करने, फ़ाइलों तक पहुंच को रोकने, फ़ाइलफिल्ड्स के रूप में संग्रहीत करने और केवल उस स्थिति को पुनर्प्राप्त करने पर फ़ाइल को पुनर्प्राप्त करने के बारे में कैसे।

उदा। आप लॉग इन होने पर केवल एक्सेस की अनुमति देने के लिए @login_requireddecorator का उपयोग कर सकते हैं। फ़ाइल के मालिक के विरुद्ध जांचने के लिए इसे request.user का उपयोग करके परिष्कृत किया जा सकता है। Django documentation का उपयोगकर्ता ऑथ अनुभाग यहां सहायक होने की संभावना है।

जैसा कि आप उल्लेख करते हैं, दूसरा विकल्प एस 3 के माध्यम से होता है, जो Django के भीतर यूआरएल उत्पन्न करता है जिसमें एक क्वेरीस्ट्रिंग होता है जो किसी प्रमाणीकृत उपयोगकर्ता को समय सीमा के साथ एक विशेष एस 3 ऑब्जेक्ट डाउनलोड करने की अनुमति देता है। उस पर विवरण s3 documentation पर पाया जा सकता है। SO पर here से पहले एक समान प्रश्न पूछा गया है।

1

मैंने बड़ी सफलता के साथ django-private-files का उपयोग किया है, यह दृश्य स्तर पर सुरक्षा लागू करता है और वास्तविक फ़ाइल स्थानांतरण करने के लिए differente बैकएंड का उपयोग करता है।

10

यदि आप छोटी फाइलों की सेवा कर रहे हैं, तो आप वास्तव में HttpResponse ऑब्जेक्ट में फ़ाइल लिखकर, सीधे उनकी सेवा करने के लिए Django का उपयोग कर सकते हैं।

आप फिर भी बड़ी फ़ाइलों की सेवा कर रहे हैं, तो आप अपने वेब सर्वर पर उस कार्य को छोड़ने के लिए, आप (अपाचे & Lighttpd के लिए और) Nginx पर X-Accel-Redirect शीर्ष लेख का उपयोग कर सकते हैं अपने वेब सर्वर आप के लिए फ़ाइल की सेवा करने के लिए चाहते हो सकता है।

आप हेडर के बारे में अधिक जानकारी in Nginx's documentation here पर पा सकते हैं, और आप some inspiration as to how to use that in Django here पा सकते हैं।

एक बार जब आप Django विचारों के माध्यम से फाइलें भेज लेते हैं, तो उपयोगकर्ता प्रमाणीकरण को लागू करना डीजेगो के ऑथ फ्रेमवर्क का उपयोग करके बहुत सीधी होनी चाहिए।