HSTS (HTTP Strict Transport Security) एक security header है जो browser को हमेशा HTTPS के through connect करने के लिए कहता है — भले ही user http:// type करे या HTTP link पर click करे। एक बार जब browser HSTS header receive कर लेता है, तो वह उस domain के लिए future के सभी requests automatically HTTPS पर upgrade करता है, downgrade attacks और insecure connections को रोकता है।
HSTS क्यों matter करता है
HSTS के बिना, आपकी site पर first request HTTP हो सकता है (301 redirect trigger होने से पहले)। उस brief window के दौरान, network पर एक attacker कर सकता है:
- HTTPS strip करें — redirect को intercept करें और user को HTTP पर रखें (SSL stripping attack)
- Cookies चुराएँ — अगर cookies initial HTTP request में send होती हैं
- Content inject करें — redirect response को modify करें
HSTS इस window को eliminate करता है। First HTTPS visit के बाद, browser कभी HTTP attempt नहीं करता।
HSTS कैसे enable करें
Nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
इसे अपने HTTPS server block (port 443) के अंदर add करें, HTTP redirect block में नहीं।
Apache
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
mod_headers चाहिए (sudo a2enmod headers)।
Cloudflare
Dashboard → SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) → Enable।
HSTS parameters
| Parameter | Example | Meaning |
|---|---|---|
max-age | 63072000 (2 years) | Browser कितने time (seconds में) HTTPS use करना remember रखता है |
includeSubDomains | — | HSTS को सभी subdomains पर भी apply करता है |
preload | — | HSTS preload list में include होने का signal |
max-age choose करना
| Stage | max-age | Purpose |
|---|---|---|
| Testing | 300 (5 minutes) | Commit होने से पहले HTTPS काम करता है verify करें |
| Confidence | 604800 (1 week) | Rollback ज़रूरी हो तो low risk |
| Production | 31536000 (1 year) | Standard recommendation |
| Long-term | 63072000 (2 years) | Preload list के लिए required |
छोटे से start करें, धीरे-धीरे बढ़ाएँ। अगर long max-age cache होने के दौरान HTTPS break हो जाता है, तो visitors आपकी site तक बिल्कुल access नहीं कर सकते — browser HTTP से connect करने से refuse करता है।
HSTS preload
HSTS preload list browsers में hardcoded domains की एक list है जो हमेशा HTTPS use करते हैं, first visit पर भी (कोई भी HSTS header receive होने से पहले)।
Preload के लिए requirements
- Valid HTTPS certificate serve करें
- Same host पर HTTP को HTTPS पर redirect करें
max-age>= 63072000 (2 years) के साथ HSTS headerincludeSubDomainsdirective include करेंpreloaddirective include करें
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
Preload के लिए submit करें
hstspreload.org पर जाएँ, अपना domain enter करें, और submit करें। Review (weeks से months) के बाद, आपका domain browsers की built-in lists में add हो जाता है।
Preload के बारे में warnings
- इसे undo करना hard है। Preload list से removal में months लगते हैं और browser release cycles चाहिए। उस दौरान, आपका domain सिर्फ HTTPS पर ही access किया जा सकता है।
includeSubDomainsmandatory है — हर subdomain को HTTPS support करना चाहिए। अगरstaging.example.comके पास cert नहीं है, तो यह unreachable हो जाता है।- सिर्फ तभी preload करें जब आप sure हैं कि सभी current और future subdomains HTTPS support करेंगे।
Common mistakes
HTTP response पर HSTS set करना
HSTS सिर्फ HTTPS पर send होना चाहिए। अगर आपका HTTP redirect भी HSTS header भेजता है, तो browser इसे ignore करता है (spec में HTTPS mandatory है)। Header सिर्फ अपने port 443 block में set करें।
Subdomains भूलना
includeSubDomains HSTS को सभी subdomains पर apply करता है। अगर internal.example.com पर HTTPS नहीं है, तो यह unreachable हो जाता है। Enable करने से पहले सभी subdomains audit करें।
max-age बहुत जल्दी बहुत high set करना
अगर HTTPS break हो जाता है (expired cert, config error), तो visitors HTTP पर fallback नहीं कर सकते। उनका browser connect करने से refuse करता है। 5 minutes से start करें, verify करें कि सब कुछ काम करता है, फिर 1 year तक बढ़ाएँ।
कैसे check करें कि HSTS active है
curl -sI https://yourdomain.com | grep -i strict-transport
# Expected: strict-transport-security: max-age=63072000; includeSubDomains
Chrome DevTools में: Network tab → request पर click करें → Headers → Strict-Transport-Security देखें।
FAQ
क्या HSTS HTTP→HTTPS redirects replace करता है?
नहीं। HSTS और redirects अलग-अलग purposes serve करते हैं। Redirect first HTTP request को catch करता है। HSTS browser को बताता है कि (first HTTPS visit के बाद) कभी HTTP request न करें। आपको दोनों चाहिए।
क्या HSTS problems create कर सकता है?
हाँ, अगर HTTPS break हो जाए। Long max-age के साथ, browser fallback के रूप में HTTP से connect करने से refuse करता है। इसीलिए आपको short max-age से start करना चाहिए और HTTPS stable होने के बाद ही बढ़ाना चाहिए।
क्या मुझे Cloudflare पर होने पर HSTS चाहिए?
Cloudflare visitor→Cloudflare connection handle करता है, लेकिन आपके origin पर HSTS full chain protect करता है। Edge के लिए Cloudflare के dashboard के through HSTS enable करें, और अगर आप Full (Strict) mode use करते हैं तो अपने origin पर भी।
HSTS और upgrade-insecure-requests CSP directive में क्या difference है?
upgrade-insecure-requests browser को sub-resources (images, scripts) HTTP के बजाय HTTPS पर load करने के लिए कहता है — mixed content fix करता है। HSTS browser को entire domain के लिए हमेशा HTTPS use करने के लिए कहता है। वे अलग-अलग problems solve करते हैं और together use किए जा सकते हैं।