Rails में Force_ssl क्या करता है?


84

पिछले प्रश्न में मुझे पता चला था कि मुझे नग्नेक्स ssl समाप्ति की स्थापना करनी चाहिए और रेल्स प्रक्रिया एन्क्रिप्टेड डेटा नहीं होना चाहिए।

तो फिर निम्न क्यों मौजूद है?

config.force_ssl = true

मैं उत्पादन विन्यास फाइल में इस टिप्पणी को देख रहा हूं। लेकिन अगर उम्मीद है कि nginx सभी ssl सामान को संभाल लेगा, ताकि मेरी रेल एप्लिकेशन एन्क्रिप्टेड डेटा से निपट न जाए तो वह क्या करता config.force_ssl = trueहै?

अगर मुझे पता है कि मुझे हमेशा नगनेक्स का उपयोग करना होगा तो क्या मुझे इसे उत्पादन में टिप्पणी करना छोड़ देना चाहिए?

जवाबों:


77

यह नहीं है सिर्फ HTTPS करने के लिए पुन: निर्देशन HTTP के लिए अपने ब्राउज़र के लिए मजबूर। यह आपके कुकीज़ को "सुरक्षित" के रूप में चिह्नित करने के लिए भी सेट करता है, और यह HSTS को सक्षम करता है , जिनमें से प्रत्येक SSL स्ट्रिपिंग के खिलाफ बहुत अच्छा सुरक्षा है।

भले ही HTTPS MITM हमलों के खिलाफ " https://example.com/yourapp " पर आपके ऐप की सुरक्षा करता है , अगर कोई आपके क्लाइंट और आपके सर्वर के बीच हो जाता है, तो वे आपको आसानी से " http://example.com/yourapp " पर जा सकते हैं । उपरोक्त सुरक्षाओं में से किसी के साथ, आपका ब्राउज़र MITM करने वाले व्यक्ति को ख़ुशी से सत्र कुकी नहीं भेजेगा।


1
Force_ssl के स्रोत में HSTS के इस विकल्प से सक्षम होने का कोई संकेत नहीं है
agios

13
@agios यह एक अलग प्रति-नियंत्रक force_sslसंपत्ति है। force_sslConfig चर जो स्थापित करता है, Rack::SSL, मिडलवेयर जो डिफ़ॉल्ट रूप से HSTS सक्षम करता है
ब्रेंट रॉयल-गॉर्डन

@agios आप गलत जगह देख रहे हैं: github.com/rails/rails/blob/…
jmera

4
ऐसा लगता config.force_ssl = trueहै कि डिफ़ॉल्ट होना चाहिए, रेल टीम ने इसे डिफ़ॉल्ट के रूप में क्यों टिप्पणी की?
हेनरी यांग

55

सेटिंग config.force_sslशामिल है ActionDispatch::SSLActionDispatch::SSLइस प्रकार (emphases स्पष्टता के लिए जोड़ा) डॉक्स कार्यक्षमता का वर्णन:

शामिल देखें यहाँ और ActionDispatch :: एसएसएल के लिये दस्तावेज यहाँ

डॉक्स

इस मिडलवेयर को जब स्टैक में जोड़ा जाता है config.force_ssl = true, और इसमें सेट किए गए विकल्प पास किए जाते हैं config.ssl_options। HTTP अनुरोधों को सुरक्षित करने के लिए यह तीन काम करता है:

  1. TLS पुनर्निर्देशित: स्थायी रूप से http: // अनुरोधों को उसी URL होस्ट, पथ, आदि के साथ डिफ़ॉल्ट रूप से सक्षम करके पुनर्निर्देशित करता हैconfig.ssl_options गंतव्य URL (जैसे redirect: { host: "secure.widgets.com", port: 8080 }) को संशोधित करने के लिए सेट करें , या redirect: falseइस सुविधा को अक्षम करने के लिए सेट करें।

  2. सुरक्षित कुकीज़: ब्राउज़रों को यह बताने के लिए कुकीज़ पर ध्वज सेट secureकरता है कि उन्हें http: // अनुरोधों के साथ नहीं भेजा जाना चाहिए। डिफ़ॉल्ट रूप से सक्षम। सेट config.ssl_optionsके साथ secure_cookies: falseइस सुविधा को अक्षम करने के लिए।

  3. HTTP स्ट्रक्ट ट्रांसपोर्ट सिक्योरिटी (HSTS): इस साइट को TLS-only के रूप में याद रखने के लिए ब्राउज़र को बताता है और स्वचालित रूप से गैर-TLS अनुरोधों को पुनर्निर्देशित करता है । डिफ़ॉल्ट रूप से सक्षम। अक्षम करने के लिए कॉन्फ़िगर config.ssl_optionsकरें hsts: false। सेट config.ssl_optionsके साथ hsts: { … }कॉन्फ़िगर HSTS रहे हैं:

    • expires: कब तक, सेकंड में, ये सेटिंग चिपक जाएगी। चूक 180.days(अनुशंसित)। ब्राउज़र प्रीलोड सूचियों के लिए अर्हता प्राप्त करने के लिए न्यूनतम आवश्यक है 18.weeks
    • subdomains: trueसभी उप-डोमेन पर इन सेटिंग्स को लागू करने के लिए ब्राउज़र को बताने के लिए सेट करें । यह आपके कुकीज़ को एक उपडोमेन पर एक असुरक्षित साइट द्वारा अवरोधन से बचाता है। के लिए चूक true
    • preload: विज्ञापन करें कि यह साइट ब्राउज़रों की HSTS सूचियों में शामिल हो सकती है। HSTS आपकी यात्रा को पहली यात्रा के अलावा हर यात्रा पर सुरक्षित रखता है क्योंकि इसने आपके HSTS शीर्षलेख को अभी तक नहीं देखा है। इस अंतर को बंद करने के लिए, ब्राउज़र विक्रेताओं में HSTS- सक्षम साइटों की एक बेक्ड-इन सूची शामिल है। अपनी साइट को शामिल करने के लिए https://hstspreload.appspot.com पर जाएं । HSTS को बंद करने के लिए, हेडर को छोड़ना पर्याप्त नहीं है। जब तक यह समाप्त नहीं हो जाता है तब तक ब्राउज़र को मूल HSTS निर्देश याद होगा। इसके बजाय, HSTS को तुरंत समाप्त करने के लिए ब्राउज़रों को बताने के लिए हेडर का उपयोग करें। सेटिंग hsts: falseएक शॉर्टकट है hsts: { expires: 0 }

अनुरोध के साथ पुनर्निर्देशन का विकल्प छोड़ सकते हैं exclude:

config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }

3
"अनुरोध के साथ पुनर्निर्देशन से बाहर निकल सकते हैं exclude" - चेतावनी: यह सुविधा केवल हाल ही में रेल 5 में जोड़ी गई थी, इसलिए हम उन लोगों के लिए रेल 4.2 या उससे नीचे के काम नहीं करेंगे
13

1
मेरा मानना ​​है कि excludeवैश्विक विकल्प रेल 5 से पहले एक लंबे समय से उपलब्ध था, इसलिए यह थोड़ा अलग वाक्यविन्यास है: config.ssl_options = { exclude: proc { |env| env['PATH_INFO'].start_with?('/healthcheck/') } }- serverfault.com/a/517401
jwadsack

12

यह सेटिंग HTTPS को उनके HTTPS समकक्षों के HTTP अनुरोधों को पुनर्निर्देशित करके बाध्य करती है। इसलिए आने वाले ब्राउज़र http://domain.com/pathको पुनर्निर्देशित किया जाएगा https://domain.com/path

टिप्पणी छोड़ने से दोनों प्रोटोकॉल की अनुमति होगी।

HTTPS अनुरोधों को संभालने के लिए आपको अभी भी अपने वेब सर्वर को कॉन्फ़िगर करना होगा।


1
लेकिन अगर आप HTTPS को nginx स्तर पर सक्षम करते हैं (सब कुछ HTTPS के माध्यम से पुनर्निर्देशित करके redirect 301 https:...), तो क्या हर कोई https से नहीं गुजर रहा होगा, इस प्रकार config.force_ssl = trueवास्तव में कुछ नहीं करता है (क्योंकि कुछ भी कभी भी http नहीं होगा)? या फिर यहां सुरक्षा का कोई गहरा कारण है?
ट्रिस्टन ताओ

2
@TristanTao हाँ, यह भी काम करेगा। लेकिन फिर भी, मैं config.force_sslसक्षम छोड़ दूंगा, बस अगर कोई व्यक्ति वेब सर्वर के कॉन्फ़िगरेशन से रीडायरेक्ट को हटा रहा है।
स्टीफन

2
सावधान रहना, config.force_ssl सत्र के खिलाफ कुकीज़ हासिल करने के संदर्भ में कंट्रोलर में force_ssl की तुलना में थोड़ा अलग है। यहाँ अधिक हैकिंग
समतुल्य

1
यह भी ध्यान दें, दोनों होने config.force_sslऔर add_header Strict-Transport-Security max-age=...;2 Strict-Transport-Securityहेडर में परिणाम होगा
विक्टर इवानोव

4

यह सर्वर के साथ सभी संचार को एन्क्रिप्ट करने और SSL का उपयोग करने के लिए, HTTPS के माध्यम से मजबूर करता है।

जब आप इसे किसी नियंत्रक में शामिल करते हैं, तो नियंत्रक केवल HTTPS अनुरोधों को स्वीकार करेगा।

सहायक लिंक्स:

  1. http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html
  2. http://rubydoc.info/docs/rails/ActionController/ForceSSL
  3. http://railscasts.com/episodes/270-authentication-in-rails-3-1?view=comments
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.