2012-04-02 25 views
5

मैं django में एक वीडियो साझा करने की वेबसाइट बना रहा हूँ।कितनी सुरक्षित निर्देशिका? और उपयोगकर्ता द्वारा पंजीकृत होने पर नई निर्देशिका कैसे बनाएं?

वर्तमान में, यदि कोई उपयोगकर्ता पंजीकृत करता है, और एक वीडियो अपलोड करता है, तो इसे media/vid/uploaded-vid पर अपलोड किया जाएगा। फिर मैं flvpeg fvv का उपयोग कर परिवर्तित कर दिया। मुझे क्या करना चाहते हैं यह है:

alex1 रजिस्टरों की उपयोगकर्ता नाम के साथ किसी को, मैं, जब वह अपने ईमेल पुष्टि करता है उसके लिए एक निर्देशिका बनाना चाहेंगे वह एक वीडियो अपलोड किया तो /media/vid/members-vid/alex1

कहा जाता है, इसे media/vid/uploaded-vid में FLV में परिवर्तित कर दिया जाएगा और फिर /media/vid/members-vid/alex1 पर कॉपी किया जाएगा। और media/vid/uploaded-vid में वीडियो हटा दिया जाना चाहिए।

और मैं /media/vid/ सुरक्षित करना चाहता हूं। आप django निर्देशिका कैसे सुरक्षित करते हैं? या सिर्फ एक apache chmod है?

मैं सोच रहा था अगर मैं अजवाइन का उपयोग कर सकते/rabbitqm दूसरे करने के लिए एक फ़ोल्डर से फ़ाइलों की प्रतिलिपि बनाने, या नए फ़ोल्डर बनाने के लिए ..

+0

क्या से सुरक्षित है? – mikerobi

+0

हैकर्स से @ मिकरोबी, मैं जानना चाहता हूं कि मेरे सर्वर – user

+0

पर वीडियो स्टोर करने का सबसे सुरक्षित तरीका क्या है, मेरा मतलब है, क्या आप किसी को वेब पर किसी निजी वीडियो तक पहुंचने से बचाने की कोशिश कर रहे हैं, या अगर कोई आपके सर्वर तक पहुंच प्राप्त करता है ? – mikerobi

उत्तर

3

एक होल्डिंग निर्देशिका का आपके द्वारा उपयोग एक अच्छा हो रहा है। हालांकि उपयोगकर्ताओं के नाम पर निर्देशिकाएं जोखिम भरा है (क्या होगा यदि कोई ऐसा नाम प्रदान करता है जो निष्पादन योग्य कमांड नाम है?) तो उपयोगकर्ता आईडी का उपयोग करना बेहतर हो सकता है। दरअसल यदि आपके पास बहुत सारे उपयोगकर्ता होने जा रहे हैं तो आप निर्देशिका उद्देश्यों के लिए निर्देशिकाओं को आसान बनाने के लिए कुछ सामान्य निर्देशिकाओं के तहत उपयोगकर्ता निर्देशिकाओं को विभाजित करने पर विचार करना चाहेंगे, और क्योंकि कुछ फ़ाइल सिस्टम निर्देशिका के अंतर्गत प्रविष्टियों की संख्या पर कम सीमा रखते हैं - उदाहरण के लिए ext3 लगभग 32K प्रविष्टियों की अनुमति देता है।

उदाहरण के लिए, उन संख्याओं से शुरू होने वाली उपनिर्देशिकाओं के लिए 1 से 9 नाम की बाहरी निर्देशिकाओं के साथ एक क्रूड उपयोगकर्ता निर्देशिका योजना आपको थोड़ा अधिक लचीलापन प्रदान करेगी।

  • /tmp/upload/1015/ अपाचे उपयोगकर्ता होने की आवश्यकता होगी:

    तो, यह सोचते हैं आप /tmp/upload/1015/ में अपने अपलोड की गई फ़ाइलों है, और आप /var/userdata/01/1015/ में /var/userdata/01/1015/ और इस प्रक्रिया फ़ाइलों के लिए उन्हें ले जाना चाहते हैं, निम्नलिखित एक समझदार दृष्टिकोण हो सकता है या लिखने योग्य समूह

  • रिकॉर्ड एक डेटाबेस में /tmp/upload/1015/ में फ़ाइलों को प्रोसेस करने की जरूरत है, इस तरह के RabbitMQ या एक RPC/वेब सेवाओं के रूप में फोन AMQP शेड्यूलिंग सेवा
  • एक शेड्यूलिंग सेवा ग्राहक का अपना उपयोगकर्ता आईडी के तहत चल ऊपर टी उठाता वह db/AMQP/वेब कॉल से नौकरी और यदि स्रोत फ़ाइल है निम्न
    • रन एक वायरस की जांच
    • एक फ़ाइल मानसिक स्वास्थ्य की जांच चलाता है यह देखने के लिए क्या यह उपयोगकर्ता फ़ोल्डर
    • को
    • प्रतियां फ़ाइल की उम्मीद
    • सफल होने पर, मूल फ़ाइल को हटा देता है (या ऐसा करने के लिए नौकरी शेड्यूल करता है अगर उसे ऐसा करने की अनुमति नहीं है, या /tmp/upload में फ़ाइलों को हटाने के लिए क्रोनबॉज पर निर्भर करता है जो 24 घंटे से अधिक पुराना है)
    • प्रयास फ़ाइलों को रूपांतरित करें, डेटाबेस में प्रासंगिक सफलता/विफलता झंडे को अपडेट करना क्योंकि यह
    • के साथ जाता है
    • पूरा होने

सूची स्पष्ट रूप से कुछ समय के लिए आगे पर जाना होगा, अपनी आवश्यकताओं पर निर्भर करता है पर अस्थायी फ़ाइलें/असफल स्रोत/आउटपुट फ़ाइलों को हटा देता। अंत में आपके पास अपाचे द्वारा पठनीय फ़ाइलों के साथ एक उपयोगकर्ता निर्देशिका होगी लेकिन अपाचे उपयोगकर्ता द्वारा लिखित नहीं है। यदि आपकी सेवा बढ़ती है तो आप इस सेवा के वीडियो प्रोसेसिंग घटकों को दूसरे सर्वर पर ले जा सकते हैं।

वैसे भी इस तरह की चीज (बहुत सरल) के बारे में बहुत अच्छा वर्णन है कि फ्लिकर के कैल हैंडर्सन ने अपनी O'Reilly पुस्तक "Building Scalable Web Sites" में कैसे किया। यह 2006 में लिखा गया था लेकिन उनका दृष्टिकोण ताज़ा प्रत्यक्ष और सीधे आगे है।

+0

+1। यह एक अच्छा जवाब है। हालांकि सलाह का एक और टुकड़ा: फ़ाइल रूपांतरण चरण प्रसंस्करण का हिस्सा बन रहा है जो सबसे अधिक कोड निष्पादित करता है, और यह कोड जटिल तृतीय-पक्ष कोड (कोडेक्स और इसी तरह) भी होगा।कौन सा सटीक कोड निष्पादित हो जाता है अंत उपयोगकर्ता के नियंत्रण में होगा (क्योंकि वे फ़ाइल प्रकार चुनते हैं) और इसलिए यह कोड कोड के अंतिम विशेषाधिकार प्राप्त भागों में से एक होना चाहिए। निश्चित रूप से, डेटाबेस को पढ़ने के लिए इसे विशेषाधिकारों के साथ चलाने दें, इसे अकेले लिखने दें। –

5

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

उपयोगकर्ताओं को अन्य निजी फाइलों को देखने से बचने के लिए, आप फ़ाइलों को साइट के मीडियाफाइल के बाहर भी डाल सकते हैं, और एक्सेस अधिकारों की जांच के लिए डीजेंगो के विचारों का उपयोग कर सकते हैं + विशेष वेबसर्वर निर्देश वास्तव में फ़ाइल को सर्वर के बिना Django के माध्यम से प्रॉक्सी करने के लिए। इन निर्देशों diffeent सर्वरों के लिए अलग हैं:

+1

मैं फ़ाइल प्रॉक्सीइंग सुविधाओं का उपयोग करने के लिए [django-sendfile] (https://github.com/johnsensible/django-sendfile) मॉड्यूल का उपयोग करने की सलाह देता हूं। –

1

क्या आपको अपने वीडियो mongoDB GridFS या इसी तरह के कुछ स्टोर में स्टोर करना चाहिए। तो आपको निर्देशिका, भंडारण, निष्पादन योग्य फ़ाइलों के साथ कोई परेशानी नहीं होगी ...