На жаль, єдине загальне рішення цієї проблеми - це дати своїм користувачам 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
s: один для порту 80 і один для порту 443. Вони не повинні мати точно однакову конфігурацію: просто не вкладайте те, що тільки для HTTPS у віртуального хоста HTTP взагалі.
Спосіб усунення вищезгаданих проблем - це використання суворої безпеки HTTP-транспорту для браузерів, які його підтримують (наскільки я знаю, це стосується всього хоста). Перше підключення може все-таки виявитись, якщо https://
воно не використовується без перенаправлення, але можливий попередньо завантажений список сайтів, які очікують у https://
будь-якому випадку (і увімкнено для HSTS).