как перенаправить страницу на https в php? - PullRequest
5 голосов
/ 04 февраля 2012

У меня есть форма для входа:

<form method =POST action="/login.php">
...
</form>

Я хотел бы перенаправить страницу login.php на использование https.

Я не хочу отправлять пользователя наhttps://.../login.php потому что они могут изменить ссылку.но я хочу сделать перенаправление на стороне сервера, прежде чем я проанализирую данные формы входа и войду в систему.

я нашел и пример:

if($_SERVER["HTTPS"] != "on") {
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: "https://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);
   exit();
}

но у меня нет$_SERVER["HTTPS"] если я var_dump($_SERVER);

у меня есть $_SERVER['SERVER_PORT'] ведьма 80.

есть идеи?

Спасибо

Ответы [ 4 ]

6 голосов
/ 04 февраля 2012

Если вы разрешите им публиковать в /login.php через обычный HTTP, а затем перенаправлять на HTTPS, вы отказываетесь от цели использования HTTPS, поскольку информация для входа в систему уже отправлена ​​в виде простого текста через Интернет.

Что бы вы могли сделать, чтобы пользователь не мог изменить URL-адрес, сделайте так, чтобы страница входа отклоняла имя входа, если оно не по HTTPS.

Для проверки использования HTTPS я использую следующее:

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) {
    // request is not using SSL, redirect to https, or fail
}

Если вы используете свой защищенный сервер с портом по умолчанию 443, то вы также можете проверить, является ли это порт, но PHP устанавливает значение $_SERVER['HTTPS'] не пустым, если используется SSL, поэтому я бы проверил на наличие этого для лучшей практики.

EDIT:

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

5 голосов
/ 30 июля 2013
if($requireSSL && $_SERVER['SERVER_PORT'] != 443) {
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
    exit();
}
5 голосов
/ 04 февраля 2012

Какой бы страницей вы не пользовались для отображения формы входа в систему, она уже должна использовать https:// до , после чего форма будет заполнена, а затем отправлена ​​на другой https:// адрес.В противном случае вы оставите форму открытой для атаки.

Вы можете заглянуть в mod_rewrite , чтобы автоматически перенаправить любой запрос, используя http:// на https://, по крайней мере, для вашей страницы входа.

3 голосов
/ 04 февраля 2012

Предполагая, что ваша страница с формой входа генерируется с помощью index.php, вам нужно поместить пример кода для перенаправления HTTP на HTTPS в index.php.Это гарантирует, что когда пользователь заполняет форму и отправляет ее, она отправляется на /login.php через HTTPS, а не HTTP.

Помещать эту проверку в login.php бесполезно, потому что ко времени login.phpполучает запрос и пытается перенаправить на соответствующий URL-адрес HTTPS. Что ж, учетные данные уже отправлены ему в виде открытого текста, чего вам следует избегать.

Наблюдение, которое вы видите $_SERVER['SERVER_PORT'], чтобы быть80 и $_SERVER["HTTPS"], которые не устанавливаются при установке чека внутри login.php, являются еще одним доказательством того, что учетные данные для входа в него передаются через HTTP и, таким образом, учетные данные для входа на сервер поступают от клиента в незашифрованном виде.,Этого следует избегать, следуя тому, что я сказал в первом абзаце этого ответа.

Кстати, я бы не использовал PHP для такого рода перенаправления.Такие перенаправления очень удобно обрабатываются mod_rewrite в Apache HTTPD.

Пример, при условии, что ваша страница входа доступна по URL, http://example.com/foo/:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^foo/$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...