केवल एचटीटीपीएस पर .htaccess से HSTS हेडर कैसे सेट करें [बंद]


82

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

मैं .htaccess का उपयोग करके एप्लिकेशन में HSTS को सक्षम करना चाहता हूं। हेडर सेट करना आसान है:

Header always set Strict-Transport-Security "max-age=31536000"

लेकिन कल्पना स्पष्ट रूप से बताती है: "एक एचएसटीएस होस्ट को एसटीएस हेडर फ़ील्ड को HTTP प्रतिक्रियाओं में शामिल नहीं किया गया है जो सुरक्षित परिवहन से अवगत कराया गया है।" इसलिए मैं इसे HTTP कनेक्शन पर भेजते समय हेडर नहीं भेजना चाहता। Http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14 देखें ।

मैंने पर्यावरण वर्जन का उपयोग करके हेडर सेट करने की कोशिश की, लेकिन मैं वहां फंस गया। किसी को भी पता है कि कैसे करना है?


स्टैक ओवरफ्लो प्रोग्रामिंग और विकास प्रश्नों के लिए एक साइट है। यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह प्रोग्रामिंग या विकास के बारे में नहीं है। देखें किन विषयों मैं यहाँ के बारे में पूछ सकते हैं सहायता केंद्र में। शायद सुपर यूजर या यूनिक्स और लिनक्स स्टैक एक्सचेंज पूछने के लिए बेहतर जगह होगी। यह भी देखें कि मैं देव ऑप्स के बारे में प्रश्न कहां से पोस्ट करूं?
jww

6
। प्रश्न को लगभग 20K बार SO (और [apache], [.htaccess] और [mod-headers] टैग उपलब्ध हैं) पर देखा जाता है। इसलिए मुझे नहीं लगता कि यह यहाँ विषय है।
नील्स्र

1
".Htaccess फाइलें मेरे वेब ऐप रेपो का हिस्सा हैं और डेवलपर्स द्वारा बनाए रखा गया है ..." - न तो स्टैक ओवरफ्लो पर शामिल करने के लिए मानदंड हैं। एक अच्छा सूंघने का टेस्ट है, क्या आप अपना कोड दिखा सकते हैं? इस मामले में, जवाब नहीं है। परीक्षा के बाद, यह सिर्फ एक अपाचे विन्यास प्रश्न है। "सवाल लगभग 20K बार देखा जाता है ..." - स्टैक ओवरफ्लो एक डंपिंग ग्राउंड है। एक ऑफ-टॉपिक प्रश्न यहां पूछा जाता है, और फिर इसे एक खोज इंजन द्वारा अनुक्रमित किया जाता है। घटना के अन्य उदाहरणों में SSH के ऊपर फाइल ट्रांसफर करना शामिल है । डेवलपर्स अवसर पर भी SSH का उपयोग करते हैं।
jww

जवाबों:


113

जाहिरा तौर पर एक HTTPS पर्यावरण चर उपलब्ध है जिसे आसानी से उपयोग किया जा सकता है। समान प्रश्न वाले लोगों के लिए:

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

2
यह सेटिंग किस फ़ाइल में बनाई गई है?
ted.strauss

7
@ ted.strauss यह .htaccessफ़ाइल में होगा ।
ज़ेन

किसी कारण से, यह मेरे सर्वर पर काम नहीं करता है। अपाचे 2.4
एंडी

14
मेरे लिए भी काम नहीं किया; हालांकि "expr=%{HTTPS} == 'on'"काम कर काम किया। पूरी लाइन तो है Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" "expr=%{HTTPS} == 'on'"। शायद यह alwaysकीवर्ड की वजह से है ?
एड्रियन फोदर

3
ध्यान दें कि स्थिति में HTTPS env var सर्वर var केenv=HTTPS लिए अलग है जिसे हम सामान्यतः mod_rewrite स्थितियों (और Apache expr) में देखते हैं । चूंकि यह एक एनवी वैरिएबल है, इसलिए यह पर्यावरण पर निर्भर है। सर्वर कॉन्फ़िगरेशन। कभी-कभी यह सेट नहीं होता है। कभी कभी यह असाइन किया गया है के रूप में एक ही मूल्य सर्वर वर (इसलिए यह हमेशा या तो "बंद" या "पर" पर सेट है - और हालत है हमेशा सच! बस का परीक्षण करती है env var सेट कर दिया जाता है, नहीं है कि यह "पर" है ।) @ AdrianFöder सुझाव के अनुसार Apache expr का उपयोग Apache 2.4+%{HTTPS}HTTPSenv=HTTPSenv=HTTPS
MrWhite

29

नील्स्र के उत्तर पर निर्माण करने के लिए, मैंने https://hstspreload.org पर सुरक्षित परिनियोजन अनुशंसाओं को पूरा करने के लिए .htaccess में निम्नलिखित का उपयोग किया, जो कि डोमेन को क्रोम ब्राउज़र में हार्डकोड करेगा। ध्यान रखें कि यह आपके उप-डोमेन में HSTS लागू करेगा, और प्रीलोड सूची में शामिल किए जाने को आसानी से पूर्ववत नहीं किया जा सकता है, इसलिए rtfm।

<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
</IfModule>

6
यह थोड़ा अधिक सुरक्षित है हाँ - यदि आप कभी भी अपने संपूर्ण डोमेन में HTTPS का उपयोग करने का इरादा रखते हैं। यदि नहीं, तो यह अविश्वसनीय रूप से खतरनाक है - और इसलिए इसके बारे में चेतावनी के बिना सुझाव देना गैर-जिम्मेदाराना है। मान लीजिए कि आपका वेबसर्वर शीर्ष स्तर के डोमेन (example.com) पर इस हेडर के लिए अनुरोध के साथ प्रतिक्रिया करता है - तो जैसे कि आप सबडोमेन को शामिल कर रहे हैं केवल http पर एक अलग वेबसर्वर द्वारा परोसा जाने वाला कोई अन्य उपडोमेन और नहीं https (जैसे intranet.example.com) , काम नहीं करेगा। प्रीलोड टैग सहित यह भी एक प्रीलोड सूची में प्रस्तुत करने की अनुमति देता है, इसलिए यह वेब ब्राउज़र में हार्डकोड है और फिर अपरिवर्तनीय है।
बैरी पोलार्ड

यह कुछ साल बाद है, इसलिए मैं सिर्फ टिप्पणी कर रहा हूं कि आपका स्निपेट आज भी प्रभावी है।
KGIII

6

Https://hstspreload.org का अनुपालन करने के लिए आप इसका उपयोग कर सकते हैं और इसे अपनी htaccess फ़ाइल पर रख सकते हैं । इसे अपने .htaccess फ़ाइल में डालें।

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L,E=HTTPS:1]
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

सबसे पहले, यह गैर- https से https के लिए पुनर्निर्देशन करेगा। और HSTS हेडर के साथ www https से www https पर पुनर्निर्देशित करें।

( http://example.com -> https://example.com -> https://www.example.com - HSTS हेडर के साथ)

Https://hstspreload.org का परीक्षण और अनुपालन करें


4

के लिए httpd.conf(यदि आपके पास इसे संपादित करने की पहुंच है) तो आप उपयोग कर सकते हैं

<VirtualHost 65.81.122.43:443>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;"
</VirtualHost>

नोट: आपको इसे केवल HTTPS vhost पर सेट करना होगा और http vhost पर नहीं हो सकता।

मुझे कब, और क्या मुझे .htaccess फ़ाइलों का उपयोग नहीं करना चाहिए?

.Htaccess फ़ाइलों को अनुमति देने से आपके सर्वर पर हर एक्सेस पर अपाचे लुक आएगा। चूंकि माता-पिता निर्देशिकाओं को भी खोजा जाता है, इसलिए इसमें कुछ (छोटी) समय लगेगा, और आपके सर्वर के प्रदर्शन को प्रभावित कर सकता है। स्रोत


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

1

फिर भी एक अन्य विकल्प हैडर को हमेशा सेट करना और गैर-एसएसएल कनेक्शन के लिए सशर्त रूप से उसे हटाना:

Header always set   Strict-Transport-Security "max-age=31536000" early
Header        unset Strict-Transport-Security env=!HTTPS

इससे यह फायदा होता है, कि Headerनिर्देश का इस्तेमाल envशर्त के साथ-साथ earlyझंडे के साथ भी किया जा सकता है । एक ही Headerनिर्देश के साथ, envऔर earlyएक साथ उपयोग नहीं किया जा सकता है, वे पारस्परिक रूप से अनन्य हैं (आधिकारिक दस्तावेज देखें: https://httpd.apache.org/docs/current/mod/mod_headers.html#header )।

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