Как заставить HTTPS использовать один файл? (PHP) - PullRequest
2 голосов
/ 11 февраля 2012

У меня есть один PHP-файл, который обрабатывает обработку кредитных карт. Он начинается как форма для ввода номера кредитной карты, затем становится экраном «подтверждения» (показывает номер кредитной карты), а затем еще раз для обработки и отображения результатов. Все три загрузки будут выполнены с помощью PHP (я понимаю, что подтверждение может быть лучше, чем в Javascript, но я его не писал). Это единственный файл в каталоге, который обрабатывает кредитные карты, и, следовательно, это единственный файл, который требует подключения httpS.

Я пытался применить это с помощью массива $ _SERVER, просматривая протокол, используемый для подключения, по префиксу SCRIPT_URI (или другой записи), но ни у одного из них не было префикса.

Есть ли простой способ сделать это с файлом .htaccess в том же каталоге? Как мне применить его ТОЛЬКО к одному файлу? Если есть какой-нибудь другой простой способ, как бы я это сделал?

Извините за вопросы, но мои поиски до сих пор не нашли рабочего решения, и я боюсь, что я не знаю, какова лучшая практика.

Спасибо!

Ответы [ 3 ]

9 голосов
/ 11 февраля 2012

В начале страницы PHP, которая выполняет всю обработку вашей кредитной карты, вы можете добавить это:

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

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // if request is not secure, redirect to secure url
    $url = 'https://' . $_SERVER['HTTP_HOST']
                      . $_SERVER['REQUEST_URI'];

    header('Location: ' . $url);
    exit;
}

Я использую ту же логику в PHP для защиты всего своего домена, помещая его в файл, который всегда вызывается в начале каждого запроса на мой сайт.

2 голосов
/ 11 февраля 2012

Прежде всего, зачем вам целенаправленно использовать весь ваш сайт по незащищенному протоколу?У вас действительно такой ограниченный бюджет производительности, что вы не можете справиться с накладными расходами TLS?Преждевременная оптимизация - проклятие человечества.

Кроме того, утверждение о том, что сценарий обработки кредитных карт является единственным, которому требуется HTTPS, подразумевает, что ваша система входа в систему отправляет пароли в открытом виде.Это не просто снижение производительности, это совершенно плохой дизайн.

Кроме того, правильное решение - использовать mod_rewrite для принудительного перенаправления на HTTPS для этой ссылки.Альтернативное решение, если у вас вообще нет возможности манипулировать конфигурацией сервера (даже через .htaccess), - это сначала заставить ваш PHP-скрипт проверить протокол, а если это не HTTPS, выполнить перенаправление и завершить работу.

2 голосов
/ 11 февраля 2012

Поместите следующий код в файл .htacces в вашей папке:

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule (.*) https://www.example.com/require-secure/ [R]

Он срабатывает, если порт НЕ 443 (443 для HTTPS) и перенаправляет на https://www.example.com/require-secure/.

Примечание: mod_rewrite необходим, но в основном доступен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...