Я использую apache, и на моей странице индекса (index.php) есть поле для входа и пароля. Аутентификация выполняется с помощью страницы login.php, а затем, если я авторизован, я могу перейти на следующую страницу home.php.
Я хочу защитить аутентификацию с помощью https, но только для аутентификации, поэтому мне нужно настроить перезапись URL.
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^/login.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L]
Я думал об этом решении, но оно не работает. Я могу ввести свои учетные данные в index.php, а затем перенаправляюсь на login.php с https, но мне все равно нужно заполнить поля для входа и пароля.
Есть идеи?
Не делай этого!
Ваши учетные данные отправляются в POST
запрос в незашифрованном виде. Сервер получает этот запрос и отвечает настроенным перенаправлением вместо передачи запроса PHP. Ваш клиент видит это перенаправление и делает не повторно представить POST
запрос против него; в конце концов, он отправил POST
запрос, куда он должен был отправить его, и получил код ответа без ошибки (301
). Он отправляет GET
запрос по новому HTTPS-каналу, не содержащему учетных данных; они должны быть введены повторно, как вы видите.
Вместо того, что вы делаете, реализуйте это так:
https://
адрес для безопасной отправки учетных данных. Без исключений.Чтобы убедиться, что в вашем коде случайно не возникнут исключения, запретите любой доступ к форме входа по протоколу HTTP вместо перенаправления.
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^/login\.php [NC]
RewriteRule ^ - [F,L]