[Security] Come reindirizzare tutte le richieste HTTP a HTTPS



Answers

I documenti Apache consigliano di non utilizzare una riscrittura:

Per reindirizzare gli URL http a https , https come segue:

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

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

Questo snippet dovrebbe entrare nel file di configurazione del server principale, non in .htaccess come richiesto nella domanda.

Questo articolo potrebbe essere venuto fuori solo dopo che la domanda è stata posta e ha risposto, ma sembra essere la strada corrente da percorrere.

Question

Sto provando a reindirizzare tutte le richieste HTTP non sicure sul mio sito (ad esempio http://www.example.com ) su HTTPS ( https://www.example.com ). Sto usando PHP btw. Posso farlo in .htaccess?




Fai tutto ciò che è spiegato sopra per il reindirizzamento. Basta aggiungere "HTTP Strict Transport Security" alla tua intestazione. Ciò eviterà l'uomo nell'attacco centrale.

Modifica il tuo file di configurazione di apache (/etc/apache2/sites-enabled/website.conf e /etc/apache2/httpd.conf per esempio) e aggiungi quanto segue al tuo VirtualHost:

# 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




Mi piace questo metodo di reindirizzamento da http a https. Perché non ho bisogno di modificarlo per ogni sito.

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






Questo è il metodo corretto per reindirizzare HTTP a HTTPS usando .htaccess secondo GoDaddy.com. La prima riga di codice è auto-esplicativa. La seconda riga di codice controlla se HTTPS è disattivato e in tal caso reindirizza HTTP a HTTPS eseguendo la terza riga di codice, altrimenti la terza riga di codice viene ignorata.

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

https://www.godaddy.com/help/redirect-http-to-https-automatically-8828




Per reindirizzare tutte le richieste http a https , puoi utilizzare:

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

Se la riscrittura mod non è abilitata e si è su apache 2.4, è anche possibile utilizzare un Redirect all'interno if direttiva per reindirizzare le richieste http a https .

Apache 2.4.

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



Se ti trovi in ​​una situazione in cui non puoi accedere alla configurazione di apache direttamente per il tuo sito, che molte piattaforme ospitate sono ancora limitate in questo modo, allora consiglierei un approccio in due passaggi. Il motivo per cui gli stessi Apache documentano che dovresti usare le loro opzioni di configurazione prima di tutto sul mod_rewrite per HTTP su HTTPS.

Innanzitutto, come detto sopra, dovresti configurare le tue regole mod_rewrite .htaccess:

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

Quindi, nei tuoi file PHP (devi farlo ovunque sia appropriato per la tua situazione, alcuni siti incanaleranno tutte le richieste attraverso un singolo file PHP, altri serviranno varie pagine a seconda delle loro esigenze e della richiesta fatta ):

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

Quanto sopra deve essere eseguito PRIMA di qualsiasi codice che potrebbe potenzialmente esporre dati protetti in un ambiente non protetto. Pertanto, il tuo sito utilizza il reindirizzamento automatico tramite HTACCESS e mod_rewrite, mentre gli script assicurano che non venga fornito alcun output quando non si accede tramite HTTPS.

Immagino che molte persone non la pensino così, e quindi Apache raccomanda di non usare questo metodo laddove possibile. Tuttavia, è sufficiente un controllo extra sullo sviluppo per garantire la sicurezza dei dati dell'utente. Speriamo che questo aiuti qualcun altro che potrebbe dover esaminare l'utilizzo di metodi non raccomandati a causa delle restrizioni sui nostri servizi di hosting.




Come stavo dicendo in questa domanda , ti suggerirei di evitare di reindirizzare ciecamente tutte le richieste HTTP al loro equivalente HTTPS, in quanto potrebbe causare una falsa impressione di sicurezza. Invece, dovresti probabilmente reindirizzare la "root" del tuo sito HTTP alla radice del tuo sito HTTPS e collegarti da lì, solo a HTTPS.

Il problema è che se qualche link o modulo sul sito HTTPS fa in modo che il client invii una richiesta al sito HTTP, il suo contenuto sarà visibile, prima del reindirizzamento.

Ad esempio, se una delle tue pagine pubblicate su HTTPS presenta un modulo che dice <form action="http://example.com/doSomething"> e invia alcuni dati che non devono essere inviati in chiaro, il browser invierà prima la richiesta completa (inclusa l'entità, se si tratta di un POST) prima al sito HTTP. Il reindirizzamento verrà inviato immediatamente al browser e, poiché un numero elevato di utenti disabilita o ignora gli avvisi, è probabile che venga ignorato.

Ovviamente, l'errore di fornire i collegamenti che dovrebbero essere al sito HTTPS ma che finiscono per essere per il sito HTTP può causare problemi non appena si ottiene qualcosa in ascolto sulla porta HTTP sullo stesso indirizzo IP del sito HTTPS. Tuttavia, ritengo che mantenere i due siti come uno "specchio" aumenti le possibilità di commettere errori, poiché tendenzialmente si suppone che si auto-correggerà reindirizzando l'utente a HTTPS, mentre spesso è troppo tardi. (C'erano discussioni simili in questa domanda ) .




L'utilizzo del seguente codice nel tuo file .htaccess reindirizza automaticamente i visitatori alla versione HTTPS del tuo sito:

RewriteEngine On

RewriteCond %{HTTPS} off

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

Se hai un file .htaccess esistente:

Non duplicare RewriteEngine On.

Assicurarsi che le righe che iniziano con RewriteCond e RewriteRule seguano immediatamente il RewriteEngine On già esistente.




Links