Назад | Перейти на главную страницу

Перепишите правила для https только для входа по htaccess

Я использую 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-каналу, не содержащему учетных данных; они должны быть введены повторно, как вы видите.

Вместо того, что вы делаете, реализуйте это так:

  1. Отправляемая HTML-форма должен указывать на https:// адрес для безопасной отправки учетных данных. Без исключений.
  2. Чтобы убедиться, что в вашем коде случайно не возникнут исключения, запретите любой доступ к форме входа по протоколу HTTP вместо перенаправления.

    RewriteCond %{HTTPS} !on 
    RewriteCond %{REQUEST_URI} ^/login\.php [NC]
    RewriteRule ^ - [F,L]