HTTP या HTTPS का पता लगाएं और फिर जावास्क्रिप्ट में HTTPS को बाध्य करें


298

क्या HTTP या HTTPS का पता लगाने और फिर जावास्क्रिप्ट के साथ HTTPS का उपयोग करने का कोई तरीका है?

HTTP या HTTPS का पता लगाने के लिए मेरे पास कुछ कोड हैं लेकिन मैं इसे इस्तेमाल करने के लिए मजबूर नहीं कर सकता https:

मैं window.location.protocol का उपयोग कर रहा हूं जो कुछ भी साइट सेट करने के https:लिए पृष्ठ को फिर से ताज़ा करने के लिए ब्राउज़र में लोड एक नया https'ed URL पुनः लोड करने के संपत्ति ।

if (window.location.protocol != "https:") {
   window.location.protocol = "https:";
   window.location.reload();
}

15
यह सर्वर की ओर से अधिक विश्वसनीय (और कुशलतापूर्वक) नियंत्रित है।
क्वेंटिन

3
मेरे विचार से आप सही है। एक MITM हमले का उपयोग करते हुए हमलावर के रूप में, मैं सिर्फ इस कोड को हटा सकता हूं। इसलिए यह केवल पैसिव हमलों से सुरक्षा प्रदान करता है।
नवदेव्लं


1
@NeoDevlin http पर एक MITM हमलावर एक सर्वर साइड को पुनर्निर्देशित कर सकता है
एलेक्स लेहमैन

1
बिल्कुल सही। 2018 में, HSTS का उपयोग न करने का कोई बहाना नहीं है। HTTPS को बाध्य करने का यह एकमात्र सुरक्षित तरीका है।

जवाबों:


500

इसे इस्तेमाल करे

if (location.protocol !== 'https:') {
    location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

location.href = blahब्राउज़र इतिहास में इस रीडायरेक्ट को जोड़ता है। यदि उपयोगकर्ता बैक बटन दबाता है, तो उन्हें उसी पृष्ठ पर वापस भेज दिया जाएगा। इसका उपयोग करना बेहतर है location.replaceक्योंकि यह ब्राउज़र इतिहास में इस रीडायरेक्ट को नहीं जोड़ता है।


3
क्यों windowऔर क्या नहीं document?
वेबजय


11
क्या तार की तुलना होनी चाहिए !==?
वेस टर्नर

5
@WesTurner यह किसी भी तरह से मायने नहीं रखना चाहिए। वे दोनों हमेशा तार होने जा रहे हैं। यदि कोई एक नंबर या बूलियन था, तो इससे फर्क पड़ सकता है।
सौम्या

15
location.replace(url)location.href = urlइस मामले के लिए बहुत बेहतर होगा । आप ब्राउज़र के इतिहास में इस पुनर्निर्देशन नहीं चाहते हैं या उपयोगकर्ता फिर से अप्रत्यक्ष रूप से प्राप्त करने के लिए वापस बटन मार रहा है।
फ्रांसिस्को ज़ाराबोज़ो

58

नए URL पर location.protocol सेट करना । कुछ भी पार्स / स्लाइस करने की आवश्यकता नहीं है।

if (location.protocol !== "https:") {
  location.protocol = "https:";
}

फ़ायरफ़ॉक्स 49 में एक बग है जहांhttps काम करता है लेकिन https:नहीं करता है। कहा फ़ायरफ़ॉक्स 54 में तय किया जाएगा ।


2
if window.location.href.match('http:') window.location.href = window.location.href.replace('http', 'https')नवीनतम एफएफ और क्रोम पर काम करता है।
मार्टिन स्टैनार्ड

2
location.protocol = "https";हालांकि फ़ायरफ़ॉक्स 28 में काम करने लगता है
निक रस्लर

1
क्रैप जो बैक बटन को तोड़ता है। location.replaceइसके बजाय उपयोग करें ।
वॉरिएंट चिंपांज़ी

22

यह अच्छा विचार नहीं है क्योंकि आप सिर्फ अस्थायी हैं पुनर्निर्देशित उपयोगकर्ता को https और ब्राउज़र इस पुनर्निर्देशन को नहीं बचाते हैं।

आप वेब-सर्वर (एपाचे, नग्नेक्स आदि) http 301, http 302 के लिए कार्य का वर्णन करते हैं


3
इस बात से सहमत। सर्वर पर https मजबूर करना कहीं अधिक विश्वसनीय है
Hoàng Long

3
यदि हैश मान को संरक्षित करना महत्वपूर्ण है तो मैं इसका उपयोग कर सकता हूं। इसे सर्वर पर नहीं भेजा जाता है और कुछ ब्राउज़र इसे संरक्षित नहीं करते हैं।
जेसन राइस

यहाँ पर केवल https के लिए Azure वेब साइट सेट करने के लिए एक लिंक दिया गया है ... blogs.msdn.com/b/benjaminperkins/archive/2014/01/07/…
Ozbus

1
जरूरी नहीं कि सच हो। एक स्कूल ऑफ़ थिंक है कि 301 कैशिंग कारणों से शैतान है। getluky.net/2010/12/14/301-redirects-cannot-be-undon
fivedogit

2
हालांकि यह सच है कि इस ग्राहक पक्ष को करने के लिए आम तौर पर यह एक अच्छा विचार नहीं है, यह वह नहीं है जो पूछा गया था। और आप यह नहीं दिखाते हैं कि यह कैसे करना है, इसलिए यह कोई जवाब नहीं है। इसके अलावा, स्थिर वेबपेजों के इन दिनों में, अक्सर इस सर्वर साइड (थिंक जीथब पेज) को करने का कोई तरीका नहीं होता है, जिसका अर्थ है कि आपको क्लाइंट पर ऐसा करना होगा। फिर भी, आप गैर-एसएसएल संस्करण से बचने वाले लोगों से बचने के लिए विहित लिंक टैग जोड़कर खोज को बेहतर बनाने में मदद कर सकते हैं।
ऑलिगॉफ्रेन

16

इस बारे में कैसा है?

if (window.location.protocol !== 'https:') {
    window.location = 'https://' + window.location.hostname + window.location.pathname + window.location.hash;
}

आदर्श रूप में आप इसे सर्वर की तरफ से करेंगे, हालांकि।


यह पोर्ट गुम है
eadmaster


5

इसका उत्तर देने के लिए एक जावास्क्रिप्ट तरीका नहीं है, लेकिन यदि आप CloudFlare का उपयोग करते हैं तो आप पृष्ठ नियम लिख सकते हैं जो उपयोगकर्ता को HTTPS में बहुत तेजी से पुनर्निर्देशित करता है और यह मुफ़्त है। CloudFlare के पेज रूल्स में ऐसा दिखता है:

यहां छवि विवरण दर्ज करें


मुझे वास्तव में यह बहुत उपयोगी लगा, सवाल का जवाब देने के लिए नहीं, बल्कि एक सास सेवा के लिए संभवतः अधिक विश्वसनीय तरीके के बारे में उपयोगी जानकारी प्रदान करने के लिए जो हमेशा एसएसएल पर पेश नहीं करता है।
MrMesees

3

तुम कर सकते हो:

  <script type="text/javascript">        
        if (window.location.protocol != "https:") {
           window.location.protocol = "https";
        }
    </script>

यह काम करता हैं। क्या यह रीडायरेक्ट करने का एक मानक तरीका है? क्या यह सभी ब्राउज़रों में काम करेगा?
महफूज



0

मुझे इस प्रश्न के उत्तर पसंद हैं। लेकिन रचनात्मक होने के लिए, मैं एक और तरीका साझा करना चाहूंगा:

<script>if (document.URL.substring(0,5) == "http:") {
            window.location.replace('https:' + document.URL.substring(5));
        }
</script>

-1
<script type="text/javascript">
        function showProtocall() {

            if (window.location.protocol != "https") {
                window.location = "https://" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
                window.location.reload();
            }
        }
        showProtocall();
</script>

-1

नमस्ते, मैं इस समाधान का उपयोग करता है पूरी तरह से काम करता है। कोई जाँच करने की आवश्यकता है, बस https का उपयोग करें।

<script language="javascript" type="text/javascript">
document.location="https:" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
</script>

3
भले ही प्रोटोकॉल https हो, तो इस पृष्ठ को ताज़ा न करें?
एंथनी

-2

मेरे पास पुई सीडीएम द्वारा परीक्षण की गई सभी स्क्रिप्ट विविधताएं हैं , जिनमें ऊपर दिए गए उत्तर और php, htaccess, सर्वर कॉन्फ़िगरेशन और जावास्क्रिप्ट का उपयोग करने वाले कई अन्य शामिल हैं, परिणाम स्क्रिप्ट हैं

<script type="text/javascript">        
function showProtocall() {
        if (window.location.protocol != "https") {
            window.location = "https://" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
            window.location.reload();
        }
    }
    showProtocall();
</script> 

विवेक-श्रीवास्तव द्वारा प्रदान किया गया सबसे अच्छा काम करता है और आप जावा स्क्रिप्ट में आगे की सुरक्षा जोड़ सकते हैं।

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