2013-03-10 10 views
29

में पासवर्ड सहेजने से बचें मैं वेब अनुप्रयोग बनाने के लिए पायथन और Django का उपयोग करता हूं, जिसे हम स्रोत नियंत्रण में संग्रहीत करते हैं। जिस तरह से Django सामान्य रूप से सेट किया जाता है, पासवर्ड settings.py फ़ाइल के भीतर सादे पाठ में होते हैं।पायथन/Django - स्रोत कोड

सादे पाठ में अपना पासवर्ड संग्रहीत करने से मुझे कई सुरक्षा समस्याओं तक खुल जाएगा, विशेष रूप से क्योंकि यह एक ओपन सोर्स प्रोजेक्ट है और मेरा स्रोत कोड संस्करण को नियंत्रित करेगा (गिट के माध्यम से, गीथूब पर, पूरी दुनिया को देखने के लिए !)

सवाल यह है कि एए Django/पायथन विकास पर्यावरण में एक सेटिंग.py फ़ाइल सुरक्षित रूप से लिखने के लिए सबसे अच्छा अभ्यास क्या होगा?

उत्तर

35

हालांकि मैं स्टैक ओवरफ्लो पर कुछ भी पाइथन-विशिष्ट में नहीं पहुंच पाया, मुझे website that was helpful मिला, और सोचा कि मैं बाकी समुदाय के साथ समाधान साझा करूंगा।

समाधान: पर्यावरण चर।

नोट: यद्यपि पर्यावरण चर दोनों लिनक्स/यूनिक्स/ओएस एक्स और विंडोज़ दुनिया में समान हैं, लेकिन मैंने इस कोड का परीक्षण विंडोज मशीन पर नहीं किया है। अगर यह काम करता है तो कृपया मुझे बताएं।

अपने बैश/श खोल में, प्रकार:

export MYAPP_DB_USER='myapp' 
export MYAPP_DB_PASSWORD='testing123' 

और अपने Django settings.py फ़ाइल में:

DATABASE_USER = os.environ.get("MYAPP_DB_USER", '') 
DATABASE_PASSWORD = os.environ.get("MYAPP_DB_PASSWORD", '') 

इस मामले में, उपयोगकर्ता नाम और पासवर्ड एक रिक्त स्ट्रिंग पर डिफ़ॉल्ट होता अगर पर्यावरण चर मौजूद नहीं था।

+6

... और, आपके द्वारा सेट किए गए पासवर्ड के साथ फ़ाइल .gitignore –

+0

Django पुस्तक के दो स्कूप्स अध्याय 5 में पर्यावरण चर मौजूद नहीं होने पर अपवाद बढ़ाने के लिए कुछ कोड प्रदान करते हैं: https: // django .2scoops.org/ –

+1

विशेष रूप से दो स्कूप्स कोड [उनके github पर] देखें (https://github.com/twoscoops/django-twoscoops-project/blob/master/project_name/project_name/settings/production.py) –

0

हालांकि वातावरण चर विन्यास का एक बहुत के लिए सुविधाजनक है, वातावरण चर में डाल पासवर्ड notsecure है। वैकल्पिक नियमित संस्करण नियंत्रण से बाहर एक विन्यास फाइल जा रहा है, यहाँ कुछ विभिन्न विपक्ष हैं:

  • पर्यावरण चर गलती से डिबगिंग चैनलों प्लेन के माध्यम से प्रेषित हो सकता है कि के माध्यम से (रिसाव हो सकता है, अंतिम उपयोगकर्ताओं को, या अप्रत्याशित स्थानों के लिए फाइल सिस्टम में ~/.* sh_history)।

  • कॉन्फ़िगरेशन फ़ाइलों को गलती से संस्करण नियंत्रण में जोड़ा जा सकता है और तैनाती विशेषाधिकारों के बिना लोगों के लिए सुलभ भंडारों में समाप्त हो सकता है।

ब्लॉग पोस्ट Environment Variables Considered Harmful for Your Secrets और पढ़ें तर्क के लिए: पर्यावरण पूरी प्रक्रिया के लिए सुलभ है, बच्चे को विरासत में मिलती है (और संभवतः 3 पार्टी) प्रक्रियाओं, और बाहरी डेवलपर्स पर्यावरण के इलाज के लिए के बीच कोई स्पष्ट धारणा वहां मौजूद गोपनीय के रूप में चर।

पायथन में सबसे सरल कॉन्फ़िगरेशन फ़ाइल प्रारूप बस a Python module है।

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