К сожалению, единственное общее решение этой проблемы - предоставить своим пользователям https://
только одно и убедиться, что они ожидают использовать только это. В конечном итоге ответственность за проверку использования SSL / TLS, как они и ожидают, лежит на пользователе.
Другие решения уязвимы для атак «человек посередине», даже если веб-сайт принимает только соединения SSL / TLS. Злоумышленники могут перехватывать трафик http://example.com
(по запросу пользователя, даже если example.com
он даже не прослушивает этот порт) и заменять его, https://example.com
устанавливая собственное соединение с ним , передавая его по доверенности обратно пользователю.
Из-за этого было правило OWASP против автоматических перенаправлений. Он был удален, вероятно, потому, что перенаправления не являются плохим способом снижения риска (особенно в отношении пассивных перехватчиков), но не решают фундаментальную проблему.
Существуют различные методы, которые вы можете использовать, чтобы направлять пользователя на сайт HTTPS, и это неплохая идея (хотя это не защитит их от активных злоумышленников MITM).
Во-первых, если у вас на веб-сервере вообще нет ничего, что должно быть в виде простого HTTP, отключите порт 80 (например, удалите Listen 80
его в конфигурации Apache Httpd). Пользователям придется использовать https://
все время, что может быть неудобно.
Во-вторых, в разделе конфигурации Apache Httpd для определенного пути (либо, Location
либо Directory
) используйте SSLRequireSSL
директиву : для этого потребуется использование SSL / TLS (даже если вы настроили его на альтернативном порту). Другие веб-серверы, вероятно, имеют аналогичные директивы.
В-третьих, вы можете использовать перенаправление, используя mod_rewrite
или внутри вашего кода (если это приложение). Нечто подобное должно быть сделано для определенного местоположения ( см. HTTPS
Специальную переменную ; вы также можете использовать 302, но 301 лучше, если это будет более постоянным):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
Что еще более важно, убедитесь, что все ссылки на этот безопасный раздел используют https://
. Никогда не полагайтесь на автоматическое перенаправление, чтобы сделать работу за вас. По этой причине я бы рекомендовал вообще не использовать его на этапе разработки .
Тем не менее, я заметил, что я все еще могу получить доступ к сайту небезопасно, т.е. используя http
вместо https
.
Это также звучит , как вы используете ту же конфигурацию , как http
и https
. Если вы используете Apache Httpd, я бы предложил разделить конфигурацию на два отдельных элемента VirtualHost
: один для порта 80 и один для порта 443. Они не должны иметь одинаковую конфигурацию: просто не ставьте то, что только для HTTPS в виртуальном хосте HTTP вообще.
Одним из способов смягчения указанных выше проблем является использование HTTP Strict Transport Security для браузеров, которые его поддерживают (насколько я знаю, это относится ко всему хосту). Самое первое соединение все еще может быть открыто, если https://
оно не используется без перенаправления, но возможно иметь предварительно загруженный список сайтов, ожидающих в https://
любом случае (и включенных для HSTS).