Come impedire l'accesso al sito Web senza connessione SSL?


11

Ho un sito Web in cui è installato un certificato SSL, in modo che se accedo al sito Web utilizzando httpsinvece di httpessere in grado di connettersi utilizzando una connessione protetta.

Tuttavia, ho notato che posso ancora accedere al sito Web in modo non sicuro, vale a dire. usando httpinvece di https.

Come posso impedire alle persone di utilizzare il sito Web in modo non sicuro?

Se ho una directory sul sito Web, ad es. samples/, posso impedire connessioni non sicure solo a questa directory?

Risposte:


12

Sfortunatamente, l'unica soluzione generale a questo problema è quella di offrire ai tuoi utenti l' https://unico e assicurarsi che si aspettino di usarlo solo. È in definitiva responsabilità dell'utente verificare che stiano utilizzando SSL / TLS, come si aspettano.

Altre soluzioni sono vulnerabili agli attacchi man-in-the-middle, anche se il sito Web accetta solo connessioni SSL / TLS. Gli aggressori potrebbero intercettare il traffico http://example.com(come richiesto dall'utente, anche se example.comnon è nemmeno in ascolto su quella porta) e sostituirlo effettuando la propria connessione https://example.com, eseguendo il proxy per l'utente.

A causa di ciò, c'era una regola OWASP contro i reindirizzamenti automatici. È stato rimosso, probabilmente perché i reindirizzamenti non sono un cattivo modo per mitigare il rischio (specialmente contro gli intercettatori passivi), ma non risolvono il problema fondamentale.

Esistono varie tecniche che puoi utilizzare per guidare l'utente al sito HTTPS e non è una cattiva idea usarle (anche se non le proteggerà dagli attaccanti MITM attivi).

In primo luogo, se non si dispone di qualcosa che dovrebbe essere servito in un semplice HTTP sul server web, disattivare la porta 80 (ad es. Rimuovere Listen 80nella configurazione di Apache Httpd). Gli utenti dovranno utilizzare https://in ogni momento, il che potrebbe essere scomodo.

In secondo luogo, nella sezione di configurazione di Apache Httpd per un determinato percorso (o Locationo Directory), utilizzare la SSLRequireSSLdirettiva : richiederà l'uso di SSL / TLS (anche se in effetti è stato configurato su una porta alternativa). Altri server web probabilmente hanno direttive simili.

In terzo luogo, è possibile utilizzare un reindirizzamento, utilizzando mod_rewriteo all'interno del proprio codice (se si tratta di un'applicazione). Qualcosa del genere dovrebbe fare, per una posizione specifica ( vedi la HTTPSvariabile speciale ; puoi usare anche 302, ma 301 è meglio se questo deve essere più permanente):

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]

Ancora più importante, assicurarsi che tutti i collegamenti a quella sezione sicura vengano utilizzati https://. Non fare mai affidamento sul reindirizzamento automatico per fare il lavoro per te. Per questo motivo, consiglierei di non usarlo affatto durante la fase di sviluppo .

Tuttavia, ho notato che posso ancora accedere al sito Web in modo non sicuro, vale a dire. usando httpinvece di https.

Sembra anche che tu stia usando la stessa configurazione per entrambi httpe https. Se stai usando Apache Httpd, suggerirei di dividere la configurazione in due distinti VirtualHosts: uno per la porta 80 e uno per la porta 443. Non devono avere esattamente la stessa configurazione: basta non mettere ciò che è solo per HTTPS nell'host virtuale HTTP affatto.


Un modo per mitigare i problemi sopra menzionati è utilizzare HTTP Strict Transport Security , per i browser che lo supportano (per quanto ne so, si applica all'intero host). La prima connessione potrebbe essere ancora esposta se https://non viene utilizzata senza il reindirizzamento, ma è comunque possibile avere un elenco precaricato di siti in attesa https:// (e abilitato per HSTS).


Buone informazioni, come fa Gmail? - dall'aspetto delle cose forzano https.
toomanyairmiles,

3
Usano un reindirizzamento. Funziona bene, a condizione che tu, come l'utente si aspetta che sia https://mail.google.com. Se, come utente, vedi che funziona http://mail.google.com, probabilmente c'è un MITM che inoltra le richieste al vero https://mail.google.com. Sfortunatamente, Gmail non può fare molto al riguardo se gli utenti stessi non controllano. Stesso principio della vita reale: se Alice vuole parlare con Bob, ma parla con Chuck (che afferma di essere Bob) invece senza verificare l'ID, Bob non saprà di questa conversazione e non sarà in grado di farlo nulla al riguardo. È responsabilità di Alice.
Bruno,

Ho visto alcuni script PHP in giro che verificheranno se connessi con HTTPS e reindirizzeranno se non si utilizza SSL a un indirizzo HTTPS. Questo, ovviamente, non è un compito facile se non stai costruendo il tuo sito adesso.
Pinguino anonimo il

@AnnonomusPerson, è esattamente lo stesso principio ed è quello che fa la regola di riscrittura da HTTP a HTTPS. Non importa se lo fai a livello di programmazione o per configurazione, è comunque un reindirizzamento con una richiesta iniziale in HTTP semplice, che presenta lo stesso problema.
Bruno,

3

Tutto ciò che serve è reindirizzare il traffico http su https - consultare questo articolo "Reindirizzare http su https Apache connessione sicura - forza connessioni HTTPS" .

Per una sottodirectory, inseriscilo in un file htaccess nella directory stessa.

RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L] 

Puoi farlo accadere solo per alcune sottodirectory?
CJ7,

@CraigJ scusa, ho perso la parte della sottodirectory, risposta aggiornata.
toomanyairmiles,

3
Sebbene ciò riduca leggermente i rischi, non funziona contro gli attaccanti MITM attivi.
Bruno,

0

Forzare l'accesso tramite HTTPS è infatti possibile, oltre ad essere un passaggio necessario per rendere il tuo sito MITM, a prova di snooper e PEBKAC. Non dovrebbe essere responsabilità dell'utente, che non funziona . Incoraggia i tuoi utenti a utilizzare invece browser sicuri.

La forzatura di HTTPS viene eseguita tramite HSTS ( HTTP Strict-Transport-Security ). L'HSTS di base è sicuro dopo la prima volta che l'utente accede al tuo sito tramite HTTPS (su tutti i browser di supporto; IE non ha la possibilità ). HSTS precaricato è sempre sicuro e copre i moderni browser a rilascio rapido (Chromium e derivati, Firefox).

Per una panoramica più completa della sicurezza HTTP (indirizzamento di URL, reindirizzamenti, cookie e contenuto misto), consultare questo howto sulla migrazione HTTPS . HSTS è l'ultimo passo in una migrazione progressiva. Non è necessario seguire l'ordine se il tuo sito è nuovo di zecca.

Standard correlati: cookie sicuri (importante se i cookie vivono più a lungo dell'intestazione HSTS), cookie HttpOnly (mentre stai proteggendo i cookie), HPKP (per browser moderni e aggressori più intraprendenti).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.