security - सभी HTTP अनुरोधों को HTTPS पर रीडायरेक्ट कैसे करें




.htaccess redirect (16)

मैं अपनी साइट पर सभी असुरक्षित HTTP अनुरोधों को रीडायरेक्ट करने का प्रयास कर रहा हूं (उदाहरण के लिए http://www.example.com ) HTTPS ( https://www.example.com ) पर। मैं PHP बीटीडब्ल्यू का उपयोग कर रहा हूँ। क्या मैं इसे .htaccess में कर सकता हूं?


Answers

इस समस्या का एक अलग किनारा तब होता है जब लोड बैलेंसर खेल में आता है।

स्थिति निम्नानुसार है: - ब्राउज़र से लोड बैलेंसर तक ट्रैफिक, और बैक, होना चाहिए (होना चाहिए) एचटीटीपीएस - लोड बैलेंसर और वास्तविक वेब सर्वर के बीच यातायात HTTP है।

इसलिए, PHP या अपाचे में सभी सर्वर अनुरोध चर दिखाते हैं कि कनेक्शन सिर्फ HTTP है। और सर्वर पर HTTP और HTTPS निर्देशिका समान हैं।

अनुमोदित उत्तर में पुनर्लेखन काम नहीं करता है। यह या तो एक लूप देता है या यह सिर्फ काम नहीं करता है।

प्रश्न यह है कि लोड लोडर पर यह कैसे काम करें।

(या लोड बैलेंसर गलत कॉन्फ़िगर किया गया है। मैं यही उम्मीद कर रहा हूं क्योंकि मैं समस्या को वेबहोस्टिंग कंपनी पर ले जा सकता हूं :-))


यह एचटीएमएल रीडायरेक्ट दृष्टिकोण है जो यह काम करता है लेकिन सर्वोत्तम नहीं है।

 <meta http-equiv="Refresh" content="0;URL=https://www.example.com" />

PHP दृष्टिकोण

<?php
function redirectTohttps() {
    if ($_SERVER['HTTPS']!="on") {
        $redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header("Location:$redirect"); 
    } 
}
?>

.htaccess दृष्टिकोण

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

से कॉपी किया गया: www.letuslook.org


मुझे पता चला कि डोमेन पर https और www का सबसे अच्छा तरीका है

RewriteCond %{HTTPS} off 
RewriteCond %{HTTPS_HOST} !^www.cheapcarhire.gr$ [NC]
RewriteRule ^(.*)$ https://www.cheapcarhire.gr/$1 [L,R=301]

.htaccess फ़ाइल में निम्न कोड जोड़ें:

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://[your domain name]%{REQUEST_URI} [R,L]

जहां [आपका डोमेन नाम] आपकी वेबसाइट का डोमेन नाम है।

आप उपरोक्त कोड की अंतिम पंक्ति को प्रतिस्थापित करके अपने डोमेन नाम से विशिष्ट फ़ोल्डर को भी रीडायरेक्ट कर सकते हैं:

RewriteRule ^ https://[your domain name]/[directory name]%{REQUEST_URI} [R,L]

अद्यतन: हालांकि यह उत्तर कुछ साल पहले स्वीकार कर लिया गया है, ध्यान दें कि अपाचे दस्तावेज के द्वारा अब इसकी दृष्टिकोण की सिफारिश की गई है। इसके बजाय एक Redirect प्रयोग करें। यह जवाब देखें।

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

Source


सभी http अनुरोधों को https रीडायरेक्ट करने के लिए, आप इसका उपयोग कर सकते हैं:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

यदि मॉड-रीराइट सक्षम नहीं है और आप अपाचे 2.4 पर हैं, तो आप https अनुरोधों को https पर रीडायरेक्ट करने के निर्देश के अंदर एक Redirect का भी उपयोग कर सकते हैं।

अपाचे 2.4।

<if "%{HTTPS} !~ /on/">
Redirect / https://www.example.com/
</if>

यदि आप ऐसी परिस्थिति में हैं जहां आप सीधे अपनी साइट के लिए अपाचे कॉन्फ़िगरेशन तक नहीं पहुंच पा रहे हैं, तो इस होस्ट में कई होस्ट किए गए प्लेटफॉर्म अभी भी प्रतिबंधित हैं, तो मैं वास्तव में दो-चरणीय दृष्टिकोण की अनुशंसा करता हूं। अपाचे स्वयं दस्तावेज़ का कारण है कि आपको एचटीटीपीएस से HTTP के लिए mod_rewrite पर पहले और सबसे पहले अपने कॉन्फ़िगरेशन विकल्पों का उपयोग करना चाहिए।

सबसे पहले, जैसा ऊपर बताया गया है, आप अपना .htaccess mod_rewrite नियम (ओं) सेट अप करेंगे:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

फिर, अपनी PHP फ़ाइल में (आपको ऐसा करने की ज़रूरत है जहां यह आपकी स्थिति के लिए उपयुक्त होगा, कुछ साइटें एक ही PHP फ़ाइल के माध्यम से सभी अनुरोधों को फ़नल कर देगी, अन्य अपनी ज़रूरतों के आधार पर विभिन्न पृष्ठों की सेवा करेंगे और अनुरोध किया जा रहा है ):

<?php if ($_SERVER['HTTPS'] != 'on') { exit(1); } ?>

उपरोक्त किसी भी कोड से पहले चलाने की आवश्यकता है जो संभावित रूप से असुरक्षित वातावरण में सुरक्षित डेटा का पर्दाफाश कर सकता है। इस प्रकार आपकी साइट HTACCESS और mod_rewrite के माध्यम से स्वत: पुनर्निर्देशन का उपयोग करती है, जबकि आपकी स्क्रिप्ट सुनिश्चित करता है कि HTTPS के माध्यम से उपयोग न होने पर कोई आउटपुट प्रदान नहीं किया जाता है।

मुझे लगता है कि ज्यादातर लोग इस तरह नहीं सोचते हैं, और इस प्रकार अपाचे ने सिफारिश की है कि आप जहां भी संभव हो इस विधि का उपयोग न करें। हालांकि, यह सुनिश्चित करने के लिए कि आपके उपयोगकर्ता का डेटा सुरक्षित है, विकास के अंत में यह अतिरिक्त जांच लेता है। उम्मीद है कि यह किसी अन्य व्यक्ति की सहायता करता है जो हमारी होस्टिंग सेवाओं के अंत में प्रतिबंधों के कारण गैर अनुशंसित विधियों का उपयोग करना पड़ सकता है।


सबसे अच्छा समाधान आपकी आवश्यकताओं पर निर्भर करता है। यह कुछ संदर्भ जोड़े गए पहले पोस्ट किए गए उत्तरों का सारांश है।

यदि आप अपाचे वेब सर्वर के साथ काम करते हैं और इसकी कॉन्फ़िगरेशन बदल सकते हैं, तो अपाचे दस्तावेज़ का पालन करें:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

लेकिन आपने यह भी पूछा कि क्या आप इसे .htaccess फ़ाइल में कर सकते हैं। उस स्थिति में आप अपाचे की RewriteEngine का उपयोग कर सकते हैं:

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

अगर सबकुछ ठीक काम कर रहा है और आप ब्राउज़र को इस रीडायरेक्ट को याद रखना चाहते हैं, तो आप इसे अंतिम पंक्ति को बदलकर स्थायी रूप से घोषित कर सकते हैं:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

लेकिन सावधान रहें यदि आप इस रीडायरेक्ट पर अपना मन बदल सकते हैं। ब्राउज़र इसे बहुत लंबे समय तक याद करते हैं और यह नहीं बदलेगा कि यह बदल गया है या नहीं।

वेबसर्वर कॉन्फ़िगरेशन के आधार पर आपको पहली पंक्ति RewriteEngine On आवश्यकता नहीं हो सकती है।

यदि आप एक PHP समाधान की तलाश करते हैं, तो $ _SERVER सरणी और हेडर फ़ंक्शन देखें :

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

अपाचे दस्तावेज़ एक पुनर्लेखन का उपयोग करने के खिलाफ अनुशंसा करते हैं:

http यूआरएल को https रीडायरेक्ट करने के लिए, निम्न कार्य करें:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

इस स्निपेट को मुख्य सर्वर कॉन्फ़िगरेशन फ़ाइल में जाना चाहिए, प्रश्न में पूछे गए .htaccess में नहीं

यह लेख शायद पूछे जाने और उत्तर देने के बाद ही आया होगा, लेकिन यह जाने का वर्तमान तरीका प्रतीत होता है।


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

समस्या यह है कि अगर HTTPS साइट पर कुछ लिंक या फॉर्म क्लाइंट को HTTP साइट पर अनुरोध भेजता है, तो इसकी सामग्री रीडायरेक्शन से पहले दिखाई देगी।

उदाहरण के लिए, यदि आपके पृष्ठों में से एक एचटीटीपीएस पर सेवा करता है तो एक फॉर्म है जो <form action="http://example.com/doSomething"> कहता है और कुछ डेटा भेजता है जिसे स्पष्ट रूप से नहीं भेजा जाना चाहिए, ब्राउज़र पहले भेज देगा HTTP अनुरोध पर पूर्ण अनुरोध (इकाई सहित, यदि यह एक पोस्ट है)। पुनर्निर्देशन तुरंत ब्राउज़र पर भेजा जाएगा और, चूंकि बड़ी संख्या में उपयोगकर्ता चेतावनियों को अक्षम या अनदेखा करते हैं, इसलिए इसे अनदेखा होने की संभावना है।

बेशक, एचटीटीपीएस साइट पर होने वाले लिंक प्रदान करने की गलती, लेकिन HTTP साइट के लिए होने वाली अंतराल के कारण आप एचटीटीपीएस साइट के समान आईपी पते पर HTTP पोर्ट पर कुछ सुन सकते हैं। हालांकि, मुझे लगता है कि दोनों साइटों को "दर्पण" के रूप में रखना केवल गलतियों को करने की संभावनाओं को बढ़ाता है, क्योंकि आप यह धारणा कर सकते हैं कि यह उपयोगकर्ता को HTTPS पर रीडायरेक्ट करके स्वयं को स्वतः सही कर देगा, जबकि यह अक्सर बहुत देर हो चुकी है। ( इस सवाल में समान चर्चाएं थीं )


मैं 301 रीडायरेक्ट के साथ अनुशंसा करता हूं:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

यदि आप अपाचे का उपयोग कर रहे हैं, तो mod_rewrite सबसे आसान समाधान है, और इसमें बहुत सारे दस्तावेज हैं कि यह कैसे करें। उदाहरण के लिए: http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html


पुनर्निर्देशन के लिए उपरोक्त समझाया गया सब कुछ करें। बस अपने हेडर पर "HTTP सख्त परिवहन सुरक्षा" जोड़ें। यह मध्य हमले में आदमी से बच जाएगा।

उदाहरण के लिए अपनी अपाचे कॉन्फ़िगरेशन फ़ाइल (/etc/apache2/sites-enabled/website.conf और /etc/apache2/httpd.conf) संपादित करें और अपने वर्चुअलहोस्ट में निम्न जोड़ें:

# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so

<VirtualHost 67.89.123.45:443>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>

https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security



मुझे http से https पर रीडायरेक्ट करने की यह विधि पसंद है। क्योंकि मुझे प्रत्येक साइट के लिए इसे संपादित करने की आवश्यकता नहीं है।

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

PHP के साथ रीडायरेक्ट करने का सबसे अच्छा तरीका निम्न कोड है ...

 header("Location: /index.php");

सुनिश्चित करें कि कोई कोड काम नहीं करेगा

header("Location: /index.php");

उपरोक्त पंक्ति से पहले सभी कोड निष्पादित किए जाने चाहिए।

मान लीजिए,

मामला एक:

echo "I am a web developer";
header("Location: /index.php");

यह स्थान (index.php) पर ठीक से रीडायरेक्ट करेगा।

प्रकरण 2:

return $something;
header("Location: /index.php");

उपरोक्त कोड स्थान (index.php) पर रीडायरेक्ट नहीं करेगा।

उम्मीद है, यह स्पष्ट है।





security http .htaccess redirect https