Как запретить доступ к сайту без SSL-соединения?


11

У меня есть веб-сайт с установленным сертификатом SSL, поэтому, если я захожу на веб-сайт с использованием httpsвместо, httpя смогу подключиться с использованием безопасного соединения.

Тем не менее, я заметил, что я все еще могу получить доступ к сайту небезопасно, т.е. используя httpвместо https.

Как я могу запретить людям использовать сайт небезопасным способом?

Если у меня есть каталог на сайте, например. samples/я могу предотвратить небезопасные соединения только с этим каталогом?

Ответы:


12

К сожалению, единственное общее решение этой проблемы - предоставить своим пользователям 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).


Хорошая информация, как Gmail делает это? - судя по всему, они заставляют https.
toomanyairmiles

3
Они используют перенаправление. Это работает нормально, при условии, что вы, как и ожидал пользователь https://mail.google.com. Если, как пользователь, вы видите, что он работает http://mail.google.com, вероятно, существует MITM, передающий запросы подлинному https://mail.google.com. К сожалению, Gmail ничего не может с этим поделать, если сами пользователи не проверяют. Принцип тот же, что и в реальной жизни: если Алиса хочет поговорить с Бобом, но вместо этого говорит с Чаком (который утверждает, что он Боб) без проверки удостоверения личности, Боб не узнает об этом разговоре и не сможет сделать это. что-нибудь об этом. Это ответственность Алисы.
Бруно

Я видел несколько сценариев PHP, которые проверяют, подключен ли он к HTTPS, и перенаправляют, если не используется SSL, на адрес HTTPS. Это, конечно, нелегкая задача, если вы сейчас не создаете свой сайт.
Анонимный пингвин

@AnnonomusPerson, это точно такой же принцип, и это то, что делает правило перезаписи с HTTP на HTTPS. Делаете ли вы это программно или по конфигурации, не имеет значения, это все же перенаправление с первоначальным запросом в простом HTTP, что представляет ту же проблему.
Бруно

3

Все, что вам нужно, это перенаправить HTTP-трафик на https - см. Эту статью «Перенаправление http на https для безопасного подключения Apache - принудительное подключение HTTPS» .

Для подкаталога поместите его в файл htaccess в самом каталоге.

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

Вы можете сделать это только для определенных подкаталогов?
CJ7

@CraigJ извините, пропустил часть подкаталога, ответ обновлен.
toomanyairmiles

3
Хотя это немного снижает риски, это не работает против активных злоумышленников MITM.
Бруно

0

Принудительный доступ через HTTPS на самом деле возможен, помимо того, что он необходим для того, чтобы сделать ваш сайт защищенным от MITM, snooper и PEBKAC. Это не должно быть ответственностью пользователя, это не работает . Поощряйте своих пользователей использовать безопасные браузеры.

Принудительное использование HTTPS осуществляется через HSTS ( HTTP Strict-Transport-Security ). Базовый HSTS является безопасным после того, как пользователь впервые зашел на ваш сайт через HTTPS (во всех поддерживаемых браузерах; в IE отсутствует такая возможность ). Предустановленный HSTS всегда безопасен и распространяется на современные быстрые версии браузеров (Chromium и его производные, Firefox).

Более полный обзор безопасности HTTP (адреса URL, перенаправления, файлы cookie и смешанное содержимое) см. В этом руководстве по миграции HTTPS . HSTS - последний шаг в прогрессивной миграции. Вам действительно не нужно следовать порядку, если ваш сайт совершенно новый.

Соответствующие стандарты: безопасные cookie-файлы (важно, если ваши cookie-файлы живут дольше, чем заголовок HSTS), cookie-файлы HttpOnly (пока вы защищаете свои cookie-файлы), HPKP (для современных браузеров и более изобретательных злоумышленников).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.