[Php] मैं उपयोगकर्ताओं को HTTP के बजाय HTTPS पर अपने पृष्ठ तक पहुंचने के लिए कैसे मजबूर कर सकता हूं?


Answers

आप इसे अपाचे पर निर्देश और mod_rewrite के साथ कर सकते हैं:

<Location /buyCrap.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>

यदि आप चाहें तो नियमित अभिव्यक्तियों का उपयोग करके आप समय के साथ स्थान को बेहतर बना सकते हैं।

Question

मेरे पास सिर्फ एक पृष्ठ है जिसे मैं एक HTTPS पृष्ठ (अपाचे पर PHP) के रूप में एक्सेस करने के लिए मजबूर करना चाहता हूं। मैं पूरी निर्देशिका को HTTPS की आवश्यकता के बिना ऐसा कैसे करूं? या, यदि आप HTTP पृष्ठ से किसी HTTPS पृष्ठ पर कोई फ़ॉर्म सबमिट करते हैं, तो क्या यह HTTP के बजाय HTTPS द्वारा भेजता है?

मेरा उदाहरण यहां दिया गया है:

http://www.example.com/some-page.php

मैं चाहता हूं कि इसे केवल एक्सेस किया जाए:

https://www.example.com/some-page.php

निश्चित रूप से, मैं इस पृष्ठ के सभी लिंक HTTPS संस्करण पर इंगित कर सकता हूं, लेकिन यह कुछ मूर्ख को उद्देश्य के माध्यम से HTTP तक पहुंचने से नहीं रोकता है ...

एक बात जो मैंने सोचा था कि PHP फ़ाइल के शीर्षलेख में रीडायरेक्ट डालने के लिए यह सुनिश्चित करने के लिए जांच कर रहा था कि वे HTTPS संस्करण तक पहुंच रहे हैं:

if($_SERVER["SCRIPT_URI"] == "http://www.example.com/some-page.php"){
  header('Location: https://www.example.com/some-page.php');
}

लेकिन यह सही तरीका नहीं हो सकता है, है ना?

बीटीडब्ल्यू, कृपया यूआरएल पर ध्यान न दें। मुझे पता है कि अगर यह वास्तव में एक पृष्ठ था जहां एक शॉपिंग कार्ट था, तो आप इसे एक अलग तरीके से करेंगे। इसे उस साइट के एक पृष्ठ के रूप में सोचें जो एक आइटम को एक कीमत के लिए बेचता है जहां आप अपनी क्रेडिट कार्ड जानकारी में टाइप करते हैं, ताकि आप अपने कार्ड को चार्ज करने के व्यक्त उद्देश्य के लिए बाहरी साइट पर भुगतान गेटवे में जमा कर सकें।




इसका उपयोग पर्याप्त नहीं है:

if($_SERVER["HTTPS"] != "on")
{
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    exit();
}

यदि आपके पास कोई http सामग्री है (जैसे बाहरी http छवि स्रोत), ब्राउज़र संभावित खतरे का पता लगाएगा। तो सुनिश्चित करें कि आपके कोड के अंदर आपके सभी रेफरी और src https हैं




ठीक है .. अब इस पर बहुत सी चीजें हैं लेकिन कोई भी वास्तव में "सुरक्षित" प्रश्न पूरा नहीं करता है। मेरे लिए यह असुरक्षित कुछ ऐसा उपयोग करने के लिए हास्यास्पद है।

जब तक आप इसका उपयोग चारा के रूप में नहीं करते।

$ _SERVER प्रचार किसी की इच्छा पर बदला जा सकता है जो जानता है कि कैसे।

इसके अलावा सज़ाद तुषार खान और थेबिगजेक ने कहा कि आप इसे करने के लिए प्रत्याशा का उपयोग भी कर सकते हैं और इसमें बहुत सारे उत्तर हैं।

बस जोड़ दो:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

आपके पास जो कुछ है उसके अंत में .httaccess और वह है कि।

फिर भी हम उतने सुरक्षित नहीं हैं जितना संभवतः हम इन 2 औजारों के साथ हो सकते हैं।

बाकी सरल है। यदि गायब गुण हैं यानी ...

if(empty($_SERVER["HTTPS"])){ // SOMETHING IS FISHY
}

if(strstr($_SERVER['HTTP_HOST'],"mywebsite.com") === FALSE){// Something is FISHY
}


यह भी कहें कि आपने अपनी प्रोजेक्टैक फ़ाइल अपडेट की है और आप जांचते हैं:

if($_SERVER["HTTPS"] !== "on"){// Something is fishy
}

ऐसे कई और चर हैं जिन्हें आप जांच सकते हैं ..

HOST_URI (यदि चेक करने के लिए इसके बारे में स्थिर गुण हैं)

HTTP_USER_AGENT (समान सत्र अलग-अलग मान)

तो सभी आईएम कह रहे हैं कि जवाब एक या दूसरे के लिए बसने के लिए नहीं है जब जवाब संयोजन में निहित है।

अधिक भरोसेमंद पुनर्लेखन जानकारी के लिए दस्तावेज़-> http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

यहां कुछ ढेर -> एसएसएल / https को .htaccess और mod_rewrite का उपयोग करके बल दें
तथा
वर्तमान पृष्ठ का पूरा यूआरएल प्राप्त करना (PHP)
एक जोड़े का नाम




htaccess उपयोग करें:

#if domain has www. and not https://
  RewriteCond %{HTTPS} =off [NC]
  RewriteCond %{HTTP_HOST} ^(?i:www+\.+[^.]+\.+[^.]+)$
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=307]

#if domain has not www.
  RewriteCond %{HTTP_HOST} ^([^.]+\.+[^.]+)$
  RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=307]



मैं $ _SERVER [HTTPS] की स्थिति की जांच के साथ कई समाधानों के माध्यम से रहा हूं लेकिन ऐसा लगता है कि यह विश्वसनीय नहीं है क्योंकि कभी-कभी यह स्क्रिप्ट को आंतरिक लूप रीडायरेक्ट के कारण सेट या सेट, सेट आदि पर सेट नहीं करता है।

यदि आपका सर्वर $ _SERVER [SCRIPT_URI] का समर्थन करता है तो यहां सबसे विश्वसनीय समाधान है

if (stripos(substr($_SERVER[SCRIPT_URI], 0, 5), "https") === false) {
    header("location:https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
    echo "<meta http-equiv='refresh' content='0; url=https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]'>";
    exit;
}

कृपया ध्यान दें कि आपकी स्थापना के आधार पर, आपका सर्वर $ _SERVER [SCRIPT_URI] का समर्थन नहीं कर सकता है, लेकिन यदि ऐसा होता है, तो यह उपयोग करने के लिए बेहतर स्क्रिप्ट है।

आप यहां देख सकते हैं: कुछ PHP इंस्टॉलेशन के पास $ _SERVER ['SCRIPT_URI'] क्यों नहीं हैं और अन्य नहीं




लोड बैलेंसर के पीछे दौड़ते समय ऐसा कुछ करना था। हैट टिप https://.com/a/16076965/766172

function isSecure() {
    return (
        (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
     || $_SERVER['SERVER_PORT'] == 443
     || (
            (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
         || (!empty($_SERVER['HTTP_X_FORWARDED_SSL'])   && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on')
        )
    );
}

function requireHTTPS() {
    if (!isSecure()) {
        header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], TRUE, 301);
        exit;
    }
}



मैंने इस स्क्रिप्ट का उपयोग किया है और यह साइट के माध्यम से अच्छी तरह से काम करता है।

if(empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "off"){
    $redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    enter code hereheader('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $redirect);
    exit();
}



आपको सुरक्षा कारणों से नहीं होना चाहिए। विशेष रूप से यदि कुकीज़ यहां खेल रहे हैं। यह आपको कुकी-आधारित रीप्ले हमलों के लिए व्यापक रूप से खुला छोड़ देता है।

किसी भी तरह से, आपको इसे ट्यून करने के लिए अपाचे नियंत्रण नियमों का उपयोग करना चाहिए।

फिर आप एचटीटीपीएस सक्षम होने के लिए परीक्षण कर सकते हैं और आवश्यकतानुसार आवश्यकतानुसार रीडायरेक्ट कर सकते हैं।

आपको केवल एक फॉर्म पोस्ट (कोई प्राप्त नहीं) का उपयोग करके भुगतान पृष्ठ पर रीडायरेक्ट करना चाहिए, और बिना किसी पोस्ट के पृष्ठ तक पहुंच को अन्य पृष्ठों पर निर्देशित किया जाना चाहिए। (यह लोगों को सिर्फ गर्म कूदने को पकड़ देगा।)

http://joseph.randomnetworks.com/archives/2004/07/22/redirect-to-ssl-using-apaches-htaccess/

शुरू करने के लिए एक अच्छी जगह है, और अधिक प्रदान करने के लिए माफ़ी। लेकिन आपको वास्तव में एसएसएल के माध्यम से सबकुछ फेंकना चाहिए

यह अधिक सुरक्षात्मक है, लेकिन कम से कम आपको कम चिंताएं हैं।




मैंने अभी एक .htaccess फ़ाइल बनाई है और जोड़ा है:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

सरल !