जीथब और हरोकू का उपयोग करते समय संवेदनशील डेटा को कैसे संभालता है?


49

मैं अभी तक Git के काम करने के तरीके का आदी नहीं हूं (और आश्चर्य है कि अगर लिनुस के अलावा कोई है?))।

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

सार्वजनिक रेपो में कुछ चीजों की जाँच नहीं की जानी चाहिए; डेटाबेस पासवर्ड, एपीआई कुंजी, प्रमाण पत्र, आदि ... लेकिन इन चीजों को अभी भी गिट रेपो का हिस्सा बनने की आवश्यकता है क्योंकि आप इसका उपयोग हरकोक में अपने कोड को पुश करने के लिए करते हैं।

इस उपयोग के मामले के साथ कैसे काम करें?

नोट: मुझे पता है कि Heroku या PHPFog इस समस्या को दरकिनार करने के लिए सर्वर चर का उपयोग कर सकता है। मेरा प्रश्न कोड के कुछ हिस्सों को "छिपाने" के तरीके के बारे में अधिक है।


3
मैं एक निजी रेपो का उपयोग करके शुरू करूँगा। फिर, इस पर निर्भर करता है कि मुझे इस पर कितना भरोसा है। मैं अपनी कॉन्फ़िगर फ़ाइलों को .ignignore कर सकता हूं जिसमें संवेदनशील डेटा होता है और केवल उन्हें स्थानीय रूप से संस्करणित करता है। (स्थानीय एक गैर बाहरी केंद्रीय स्थान है जो एक घर सर्वर में हो सकता है या जो जानता है)
ऋग

जवाबों:


30

हरकोक पर पासवर्ड / एपी की कीज़ को गुप्त रखने का पसंदीदा तरीका है, हरोकू कमांडलाइन एप्लिकेशन के माध्यम से कॉन्फिगर वैल्यूज़ को सेट करना। निम्नलिखित उदाहरण एक हॉकू देव केंद्र लेख से लिया गया है

(नीचे दिए गए उदाहरण, और मेरा पूरा जवाब रेल से संबंधित है)

$ cd myapp
$ heroku config:add S3_KEY=8N029N81 S3_SECRET=9s83109d3+583493190
Adding config vars and restarting myapp... done, v14
S3_KEY:     8N029N81
S3_SECRET:  9s83109d3+583493190

फिर ENV [] वैरिएबल का उपयोग करके अपने कोड में इन कॉन्फिगर वैल्यूज को देखें

AWS::S3::Base.establish_connection!(
  :access_key_id     => ENV['S3_KEY'],
  :secret_access_key => ENV['S3_SECRET']
)

इस तरह आपके संवेदनशील पासवर्ड गिट रिपॉजिटरी में संग्रहीत नहीं होते हैं। (नोट: ऐप को स्थानीय स्तर पर चलाते समय, इन मूल्यों को अपनी .bashrcफ़ाइल में सेट करें

इसके अलावा, मुझे यकीन नहीं है कि आप किस प्रकार का एप्लिकेशन चला रहे हैं, लेकिन रेल में, हरोकू आपके database.yml फ़ाइल का उपयोग नहीं करता है, यह बस आपके ऐप सेटिंग्स के अनुसार आपके डेटाबेस उपयोगकर्ता नाम / पासवर्ड सेट करता है। तो आप उन क्रेडेंशियल्स को गिट में सहेजने से बच सकते हैं

इसके अलावा, अगर आप अपना खुद का एप्लिकेशन चला रहे हैं और चाहते हैं कि यह निजी रहे, तो जीथब का एक बढ़िया विकल्प बिटकॉइन है जो मुफ्त प्राइवेट रिपॉजिटरी प्रदान करता है।


17

कई विचार ... सार्वजनिक कुंजी क्रिप्टोग्राफी सबसे लचीला जवाब है।

ओफ़्फ़्यूसेशन (केवल कोड के लिए)

कोड के जिन हिस्सों को आप छिपाना चाहते हैं, क्या आप उन्हें एक अलग प्रोजेक्ट में रख सकते हैं, उन्हें संकलित कर सकते हैं, और केवल संकलित कोड में जांच सकते हैं, स्रोत नहीं? यह एन्क्रिप्शन नहीं है और पासवर्ड या कुंजियों को एन्क्रिप्ट करने के लिए उपयुक्त नहीं है । लोग अब भी आपके संकलित कोड को रिवर्स-इंजीनियर कर सकते हैं, लेकिन उन्हें स्रोत नहीं मिलता है।

निजी जीआईटी भंडार

क्या इसके लिए जनता के पास भण्डार होना चाहिए ?

सर्वर संग्रहण

क्या आप इस जानकारी को उस उपयोगकर्ता खाते की संरक्षित निर्देशिका में संरक्षित फ़ाइल में संग्रहीत कर सकते हैं, जिसके तहत एप्लिकेशन चलता है? मैं इस तरह से ssh को ~ / .ssh / id_rsa और 600 के एक chmod के साथ कॉपी करता हूं। ऐसा करने से, एक पर्यावरण चर का उपयोग किया जा सकता है। आपको किसी प्रकार की कुंजी संग्रहीत करने के लिए सर्वर पर कहीं न कहीं आवश्यकता होती है, या ऐसा कोई तरीका नहीं है जिससे आप किसी भी चीज़ की रक्षा कर सकें।

सममित क्रिप्टोग्राफी (सिर्फ आपके लिए)

यदि आप एकमात्र डेवलपर हैं, तो आप सर्वर पर एक कुंजी रख सकते हैं और आपकी मशीन पर वही कुंजी रख सकते हैं और पासवर्ड या प्रमाणपत्र जैसे कुछ डेटा की सुरक्षा के लिए एक सममित एन्क्रिप्शन योजना का उपयोग कर सकते हैं। दोस्तों के साथ एक सममित कुंजी साझा करना गड़बड़ हो जाता है।

असममित क्रिप्टोग्राफी (कई डेवलपर्स के लिए)

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

साधन

Openssl शायद एकमात्र क्रिप्टोग्राफी टूल है जिसकी आपको कभी आवश्यकता होगी। अपनी स्वयं की क्रिप्टोग्राफी एल्गोरिथ्म या प्रकाशित एल्गोरिथम के अपने स्वयं के कार्यान्वयन को न लिखें।

विचार बंद करना

यदि "सर्वर" एक वेब सर्वर है जो https का उपयोग करता है, तो आपके पास पहले से ही निजी कुंजी को संग्रहीत करने के लिए सर्वर पर किसी प्रकार का एक सुरक्षित कीस्टोर होना चाहिए। यह एक तरह से दिमाग उड़ाने वाला है कि एक होस्टिंग कंपनी के लिए भत्ते नहीं होंगे। इस। हो सकता है कि उनके पास कुछ संकेत हों कि दूसरे आपके सामने आने वाली चुनौती को कैसे हल करते हैं?


जोड़ने के लिए, सर्वर साइड स्टोरेज में WRT - मुझे नहीं पता कि क्या आप हेरोकू के साथ ऐसा कर सकते हैं, लेकिन मैंने ऐसे सेटअप देखे हैं जहां एक स्क्रिप्ट को पोस्ट-प्राप्त हुक से निकाल दिया जाता है और / या तैनाती सर्वर पर कैपिस्ट्रानो की तरह कुछ किया जाता है। सही स्थान पर परिनियोजन डेटाबेस फ़ाइल की प्रतिलिपि बनाएँ। यह आपको डेटाबेस फ़ाइल को रेपो से पूरी तरह से बाहर रखने की अनुमति देता है, और ऐसी जानकारी सुनिश्चित करने के लिए एक स्वचालित तंत्र है।
शौना

यहां तक ​​कि निजी जीआईटी रिपोज को संवेदनशील डेटा की सुरक्षा करनी चाहिए। बस कुछ समय के लिए दुर्घटना से यह सार्वजनिक हो जाता है। इसके अलावा, मुझे लगता है कि असममित क्रिप्टो का उपयोग हमेशा सममित के बजाय किया जाना चाहिए। मुझे इसका कोई उल्टा नहीं दिखता है, केवल यह उल्टा है: आप नए संवेदनशील से टू-हार्डकोड डेटा को एन्क्रिप्ट करना आसान बनाने के लिए कहीं-कहीं एपीआई भी छोड़ सकते हैं।
टिबेरिउ-आयनो स्टेन

7

यदि आप हेरोकू पर अपना कोड चलाना चाहते हैं, तो आपको उन्हें देना होगा - आप इसे अपने होस्टिंग प्रदाता से "गुप्त" नहीं रख सकते।

अब तक सार्वजनिक गिट रिपॉजिटरी जाते हैं, यदि आपकी परियोजना खुला स्रोत है, लेकिन आप होस्टिंग विवरण साझा नहीं करना चाहते हैं, तो आपको तैनाती के प्रयोजनों के लिए अपनी परियोजना का एक निजी कांटा बनाए रखने की आवश्यकता होगी।


1
धन्यवाद, लेकिन इसके लिए वर्कफ़्लो क्या है?
जोनास

6

आपको कोड के कुछ हिस्सों को नहीं छिपाना चाहिए। आपके सिस्टम की सुरक्षा को कोड की गोपनीयता पर भरोसा नहीं करना चाहिए; जिसे "अस्पष्टता के माध्यम से सुरक्षा" के रूप में जाना जाता है, जो सुरक्षा विशेषज्ञों द्वारा पर आधारित है क्योंकि यह बहुत खराब तरीके से काम करता है।

इसके बजाय, पासवर्ड, क्रिप्टो कुंजी, आदि को कोड से अलग रखा जाना चाहिए। उन्हें एक अलग कॉन्फ़िगरेशन फ़ाइल या कॉन्फ़िगरेशन मान में संग्रहीत करें जो कोड द्वारा पढ़ा जाता है। आपको उन्हें git में संग्रहीत करने की आवश्यकता नहीं है।

महत्वपूर्ण: अपने स्रोत कोड में कभी भी क्रिप्टोग्राफ़िक कुंजियाँ, पासवर्ड या अन्य रहस्य न रखें! यह बहुत बुरा अभ्यास है।

यह सभी देखें:

प्लग: IT Security.SE सुरक्षा के बारे में सवाल पूछने के लिए एक शानदार जगह है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.