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.com
non è 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 80
nella 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 Location
o Directory
), utilizzare la SSLRequireSSL
direttiva : 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_rewrite
o all'interno del proprio codice (se si tratta di un'applicazione). Qualcosa del genere dovrebbe fare, per una posizione specifica ( vedi la HTTPS
variabile 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 http
invece di https
.
Sembra anche che tu stia usando la stessa configurazione per entrambi http
e https
. Se stai usando Apache Httpd, suggerirei di dividere la configurazione in due distinti VirtualHost
s: 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).