दुर्भाग्य से, इस समस्या का एकमात्र सामान्य समाधान यह है कि आप अपने उपयोगकर्ताओं को https://केवल यह सुनिश्चित करें और सुनिश्चित करें कि वे केवल उसी का उपयोग करने की उम्मीद करते हैं। यह अंततः उपयोगकर्ता की ज़िम्मेदारी है कि वे एसएसएल / टीएलएस का उपयोग कर रहे हैं, जैसा कि वे उम्मीद करते हैं।
अन्य समाधान मानव-में-मध्य हमलों के लिए असुरक्षित हैं, भले ही वेबसाइट केवल एसएसएल / टीएलएस कनेक्शन स्वीकार करती है। हमलावर ट्रैफ़िक को इंटरसेप्ट कर सकते हैं http://example.com(जैसा कि उपयोगकर्ता द्वारा अनुरोध किया गया है, भले ही example.comवह पोर्ट पर भी नहीं सुन रहा हो) और इसे अपने स्वयं के कनेक्शन से https://example.comबदलकर, इसे उपयोगकर्ता के पास वापस भेज दें।
इस वजह से स्वचालित पुनर्निर्देशन के खिलाफ एक OWASP नियम था । इसे हटा दिया गया था, शायद इसका कारण यह है कि पुनर्निर्देशन जोखिम को कम करने का एक बुरा तरीका नहीं है (विशेष रूप से निष्क्रिय ईवेर्सड्रॉपर्स के खिलाफ), लेकिन मूलभूत समस्या को हल नहीं करते हैं।
विभिन्न तकनीकें हैं जिनका उपयोग आप उपयोगकर्ता को HTTPS साइट पर मार्गदर्शन करने के लिए कर सकते हैं, और उनका उपयोग करना बुरा नहीं है (हालाँकि यह सक्रिय MITM हमलावरों के खिलाफ उनकी रक्षा नहीं करेगा)।
सबसे पहले, यदि आपके पास ऐसा कुछ भी नहीं है जिसे वेबसर्वर पर सादे HTTP में परोसा जाना चाहिए, तो पोर्ट 80 को बंद कर दें (जैसे Listen 80Apache Httpd के कॉन्फ़िगरेशन में निकालें )। उपयोगकर्ताओं को https://हर समय उपयोग करना होगा , जो असुविधाजनक हो सकता है।
दूसरे, एक विशेष मार्ग (या तो के लिए अपने अपाचे httpd विन्यास खंड में Locationया Directory), का उपयोग SSLRequireSSLनिर्देश : यह (भले ही आप वास्तव में एक विकल्प के बंदरगाह पर यह कॉन्फ़िगर कर दिया है) SSL / TLS के उपयोग की आवश्यकता होगी। अन्य वेब सर्वरों में संभवतः समान निर्देश होते हैं।
तीसरा, आप mod_rewriteअपने कोड का उपयोग करके या उसके भीतर एक पुनर्निर्देशन का उपयोग कर सकते हैं (यदि यह एक अनुप्रयोग है)। ऐसा कुछ करना चाहिए, एक विशिष्ट स्थान के लिए ( विशेष चर देखेंHTTPS ; आप 302 का भी उपयोग कर सकते हैं, लेकिन 301 बेहतर है यदि यह अधिक स्थायी हो):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
इससे भी महत्वपूर्ण बात, सुनिश्चित करें कि उस सुरक्षित अनुभाग के सभी लिंक का उपयोग करें https://। आपके लिए काम करने के लिए कभी भी स्वचालित पुनर्निर्देशन पर भरोसा न करें। इस कारण से, मैं विकास चरण के दौरान इसका उपयोग नहीं करने की सलाह दूंगा ।
हालांकि, मैंने देखा है कि मैं अभी भी गैर-सुरक्षित रूप से वेबसाइट तक पहुंच सकता हूं, अर्थात। के httpबजाय का उपयोग करके https।
दोनों के लिए समान विन्यास उपयोग कर रहे हैं यह भी लग रहा है httpऔर https। यदि आप Apache Httpd का उपयोग कर रहे हैं, तो मैं दो अलग-अलग VirtualHosts में कॉन्फ़िगरेशन को विभाजित करने का सुझाव दूंगा : पोर्ट 80 के लिए एक और पोर्ट 443 के लिए एक। उनके पास बिल्कुल समान कॉन्फ़िगरेशन होने की आवश्यकता नहीं है: बस वह मत डालें जो केवल HTTPS के लिए है HTTP वर्चुअल होस्ट में बिल्कुल।
ऊपर बताई गई समस्याओं को कम करने का एक तरीका HTTP स्ट्रिक्ट ट्रांसपोर्ट सिक्योरिटी का उपयोग करना है , जो इसे समर्थन करने वाले ब्राउज़रों के लिए है (यह पूरे मेजबान पर लागू होता है जहां तक मुझे पता है)। यदि https://पुनर्निर्देशन के बिना उपयोग नहीं किया जाता है, तो बहुत पहले कनेक्शन को अभी भी उजागर किया जा सकता है, लेकिन किसी भी तरह की अपेक्षा वाली साइटों की पूर्व-लोड की गई सूची https:// (और एचएसटीएस के लिए सक्षम) होना संभव है।