Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

प्रोडक्शन में RubyGems.org पर भरोसा करने की तुलना में स्वयं-होस्टेड Ruby Gems सुरक्षित क्यों हैं

एक भाषण + एक स्क्रीनकास्ट जो आपको दिखाता है कि अपने खुद के जेम्स कैसे होस्ट करें

इसे रास्ते से हटा दें: जेम्स कमाल के हैं, और RubyGems.org एक बेहतरीन सेवा है।

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

सोशल इंजीनियरिंग FTW

कुछ दिन पहले RubyNation पर, Ben Smith ने "Hacking With Gems" नामक एक शानदार बात दी।

जेम्स पर हैकिंग नहीं, बल्कि जेम्स का उपयोग एक तरीके के रूप में हैक करने के लिए... एक अटैक वेक्टर के रूप में।

उन्होंने एक शांत प्रयोग किया।

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

कार्ड पर एक बात लिखी थी: gem install rubynation। और लगभग 10% उपस्थित लोगों ने किया।

प्रोडक्शन में RubyGems.org पर भरोसा करने की तुलना में स्वयं-होस्टेड Ruby Gems सुरक्षित क्यों हैं

जेम ने क्या नहीं किया

जेम ने कुछ उपयोगी चीजें कीं। लेकिन जो इसने नहीं किया वह अधिक दिलचस्प था।

इसने नहीं:

  • आपके gemcutter डॉटफाइल से RubyGems.org क्रेडेंशियल चुराए

  • प्लेनटेक्स्ट पासवर्ड इंटरसेप्ट किए और उन्हें आपके rails /public डायरेक्टरी में स्टोर किया

  • आपके सिस्टम में एक गुप्त SSH अकाउंट जोड़ा

लेकिन यह कर सकता था। Ben से पूछें अगर आप मुझ पर विश्वास नहीं करते।

यह आपको डराना चाहिए

मुझे बस पीछे हटने दें और इसे फिर से कहें, ताकि यह बैठ जाए।

लगभग 25 लोग - कंप्यूटर प्रोग्रामर्स - अपने डेवलपमेंट मशीनों पर मनमाना कोड चलाने में हेरफेर किए गए। कुछ ने तो इसे रूट के रूप में भी चलाया।

मेरा मतलब इन लोगों को निशाना बनाना नहीं है। यह सिर्फ Ruby समुदाय में मानदंड है।

यह क्यों हुआ?

लोग जेम्स पर भरोसा करते हैं।

  • क्योंकि वे आमतौर पर काम करते हैं।

  • क्योंकि Rails एक जेम है।

  • क्योंकि Aaron Patterson, Steve Klabnik, और Yehuda Katz जैसे प्रसिद्ध लोग उन्हें मेंटेन करते हैं।

लेकिन यह एक समस्या है जब आप उन लोगों पर भरोसा करना शुरू करते हैं जिन्हें आप नहीं जानते।

यह एक समस्या है जब आप gem install rubynation टाइप करते हैं उतनी ही कम हिचकिचाहट के साथ जितनी आप gem install rails टाइप करेंगे।

और आइए ईमानदार रहें। ऐसा कम से कम एक बार किसने नहीं किया है? हम आलसी हैं और जेम्स आसान हैं।

RubyGems.org दोषी नहीं है

यह सिर्फ गलत काम करना बेहद आसान बनाता है। अपने सर्वर्स पर अविश्वसनीय कोड चलाने के लिए। अपने सर्वर्स पर चलने वाले कोड में परिवर्तनों के बारे में अनजान रहने के लिए।

इसीलिए मैं सुझाव दे रहा हूं कि हम सभी प्रोडक्शन में इसका उपयोग करना बंद कर दें।

समाधान

हस्ताक्षर पर्याप्त नहीं हैं

हर किसी को अपने जेम्स पर हस्ताक्षर करने चाहिए। लेकिन हस्ताक्षर पर्याप्त नहीं हैं। एक हस्ताक्षर केवल प्रकाशक की पहचान सत्यापित करता है। यह आपको नहीं बताता कि वे अच्छे, बुरे, या अराजक तटस्थ हैं।

कोई बचाव के लिए नहीं आ रहा

एक आदर्श दुनिया में, हमारे पास एक विश्वसनीय संगठन होगा जो जेम्स के संस्करणों को वितरित करता है जो अच्छे होने के लिए जाने जाते हैं।

यदि यह आपको गलत तरीके से रगड़ता है, तो सोचें कि Debian जैसे संगठन Linux के लिए कुछ समान कैसे करते हैं। यदि यह अभी भी आपको गलत तरीके से रगड़ता है....ठीक है, मैं सम्मानित महसूस कर रहा हूं कि आप मेरा ब्लॉग पढ़ रहे हैं, Mr. Stallman।

मैं एक आदर्श दुनिया में क्यों कहता हूं? खैर, क्योंकि अन्य विकल्प बहुत काम के हैं, और मैं इसे नहीं करना चाहता।

...क्या आप में से कोई YC उम्मीदवार इस पर काम कर सकता है कृपया?

एकमात्र वास्तविक विकल्प: DIY

दुर्भाग्य से मुझे इस बदबूदार पुरानी वास्तविक दुनिया में रहना होगा। अपने जेम्स पर कुल नियंत्रण रखने का एकमात्र वास्तविक तरीका है:

  • विश्वासघात के लिए कोड की समीक्षा करें

  • जेम्स को स्वयं होस्ट करें

सौभाग्य से, अपने खुद के जेम्स होस्ट करना आसान है। मैं आपको दिखाऊंगा कैसे।

अपने खुद के जेम्स कैसे होस्ट करें

प्रोडक्शन में RubyGems.org पर भरोसा करने की तुलना में स्वयं-होस्टेड Ruby Gems सुरक्षित क्यों हैं

यह जादू नहीं है

एक जेम "सर्वर" वेब पर फ्लैट फाइलों का एक गुच्छा है। आप उन्हें कहीं भी होस्ट कर सकते हैं, यहां तक कि S3 या Dropbox पर भी।

टेस्टबेंच के रूप में एक Rails ऐप बनाएं

मैं यहां Rails का उपयोग केवल इसलिए कर रहा हूं क्योंकि यह हमें खेलने के लिए एक पूर्व-निर्मित Gemfile देता है। यह ऐप कुछ नहीं करता।

`$ rails new myapp
$ cd myapp `

.gem फाइलें डाउनलोड करें

यह बंडलर कमांड Gemfile.lock द्वारा संदर्भित सभी .gem फाइलों को डाउनलोड करेगा और उन्हें /vendor/cache में रखेगा

`$ bundle package
$ mkdir /tmp/gem_server
$ mv vendor/cache/ /tmp/gem_server/gems `

'सर्वर' फाइलें जेनरेट करें

.gem फाइलों की एक डायरेक्टरी लेना और उन्हें सर्विंग के लिए तैयार करना, आप gem generate_index चलाते हैं।

`$ gem generate_index -d /tmp/gem_server/ `

इसे सब ऑनलाइन डालें

अब मैं प्रोडक्शन में इसकी अनुशंसा नहीं करूंगा, लेकिन...

`$ mv /tmp/gem_server /Users/snhorne/Dropbox/Public/ `

अपना Gemfile संपादित करें और bundle update करें

"source" लाइन को अपडेट करें ताकि यह rubygems के बजाय आपके नए होस्ट की ओर इंगित करे

`# Gemfile
source 'https://dl.dropboxusercontent.com/u/12345/gem_server'
...
gem 'rails', '3.2.13' `

कूल! यह मेरे Dropbox से जेम्स खींच रहा है।

`$ bundle update
Fetching gem metadata from https://dl.dropboxusercontent.com/u/12345/gem_server/.
Fetching full source index from https://dl.dropboxusercontent.com/u/12345/gem_server/
Using rake (10.1.0)
Using i18n (0.6.1)
Using multi_json (1.7.7)
Using activesupport (3.2.13) `

बोनस: निजी जेम्स को HTTP बेसिक ऑथेंटिकेशन से संरक्षित किया जा सकता है

बस अपने जेमफाइल को इस तरह बनाएं:

`# Gemfile
source 'https://username:password@example.com/' `

विकल्प

क्या यह दृष्टिकोण आपके लिए काम नहीं करता? कुछ मुफ्त और व्यावसायिक जेम होस्टिंग समाधान हैं जो आपको कुछ और घंटियाँ और सीटी देते हैं।

Geminabox एक ओपन सोर्स एप्लिकेशन है जो बहुत सारे कमांड लाइन काम को समाप्त करता है।

Gemfury एक निजी जेम होस्टिंग कंपनी है। मैंने अतीत में एक क्लाइंट के लिए कुछ मालिकाना जेम्स होस्ट करने के लिए उनका उपयोग किया है। इसे सेटअप करना आसान था और कभी कोई समस्या नहीं हुई।

  1. ViewComponent में महारत: पुन: प्रयोज्य Rails व्यू कंपोनेंट बनाने के लिए एक व्यावहारिक गाइड ViewComponent में महारत: पुन: प्रयोज्य Rails व्यू कंपोनेंट बनाने के लिए एक व्यावहारिक गाइड

    React से प्रेरित, ViewComponents Ruby ऑब्जेक्ट्स हैं जिनका उपयोग व्यू रेंडर करने के लिए मार्कअप बनाने के लिए किया जाता है। ViewComponent Rails में पुन: प्रयोज्य, टेस्टेबल, और एनकैप्सुलेटेड व्यू कंपोनेंट बनाने के लिए एक फ्रेमवर्क है। आमतौर पर, पुन: प्रयोज्य व्यू Rails में पार्शियल का उपयोग करके बनाए

  1. रूबी केस स्टेटमेंट्स में महारत: बहुमुखी उपयोग और व्यावहारिक उदाहरण रूबी केस स्टेटमेंट्स में महारत: बहुमुखी उपयोग और व्यावहारिक उदाहरण

    जब भी आपको कुछ if / elsif स्टेटमेंट्स का उपयोग करने की आवश्यकता होती है तो आप इसके बजाय रूबी केस स्टेटमेंट का उपयोग करने पर विचार कर सकते हैं। इस पोस्ट में, आप कुछ अलग उपयोग के मामले सीखेंगे और यह वास्तव में हुड के नीचे कैसे काम करता है। नोट: अन्य प्रोग्रामिंग भाषाओं में इसे स्विच स्टेटमेंट के रूप

  1. इनबॉक्स ज़ीरो पर पुनर्विचार: क्या यह वास्तव में उत्पादकता बढ़ाता है? इनबॉक्स ज़ीरो पर पुनर्विचार: क्या यह वास्तव में उत्पादकता बढ़ाता है?

    कुछ साल पहले, एक सहकर्मी और मैंने ईमेल के विषय पर बातचीत की। उसके इनबॉक्स में दसियों हजार ईमेल थे, और जैसा कि उसने समझाया कि वह इसे साफ क्यों नहीं करती, उसने एक अच्छा मुद्दा उठाया - जब आप बस खोज सकते हैं कि आप क्या ढूंढ रहे हैं, तो ईमेल सॉर्ट करने में इतनी ऊर्जा क्यों लगाएं? इनबॉक्स ज़ीरो कई उत्पाद