Я написал несколько веб-сервисов PHP, где передаю аргументы по URL-адресу. Чтобы предотвратить несанкционированный доступ, я передаю уникальный ключ в качестве одного из аргументов. Я вызываю файл PHP через HTTPS, и мне интересно, есть ли способ предотвратить запуск script, если HTTPS не используется.
Как я могу предотвратить доступ к файлам PHP, если вызывающий абонент не использует HTTPS?
Ответ 1
Отключить тему, но если вы используете PHP с Apache Httpd и mod_ssl
, вы можете принудительно установить SSL-доступ к файлам (и скриптам PHP), поместив SSLRequireSSL
в .htaccess
или в конфигурации Каталога.
Ответ 2
if(empty($_SERVER['HTTPS'])) {
// ....
exit;
}
Ответ 3
Чтобы уточнить: вы хотите, чтобы клиент не вызывал URL-адрес, содержащий секретный токен, по незашифрованному соединению, верно? Если это так, то проблема в основном не с вами, а с браузером клиента. Вы можете перенаправить клиента на безопасное соединение, если он еще не использует его, но даже если вы сделаете так , клиент уже сделал небезопасный, перехваченный запрос на ваш сервер, прежде чем перенаправить его!
Mozilla прилагает усилия для решения этой проблемы. Начиная с Firefox 4 сервер может отправить заголовок Strict-Transport-Security
, который впоследствии будет препятствовать незашифрованному доступу (хотя, очевидно, перед отправкой заголовка все равно может произойти незашифрованный доступ.)
Ответ 4
Если вы используете Apache, вы можете использовать mod_rewrite для перенаправления HTTP-запросов на https.
Например, Это то, что мы используем:
RewriteCond %{HTTPS} !=on
RewriteRule ^account(.*) https://%{SERVER_NAME}/account$1 [R=301,L]
Это перенаправляет http://domain/account в https://domain/account
Ответ 5
Вы можете запретить серверу отвечать на незашифрованный запрос, но вы не можете предотвратить отправку его клиентом, что также плохо для безопасности паролей. И это не самая большая проблема с помещением секретного токена в URL-адрес: он остается в истории браузера, его можно увидеть в реферере, когда пользователь покидает ваш сайт, а любой веб-сайт, который пользователь посещает, силовой или словарной атаки с помощью псевдо-класса CSS :visited
CSS. В целом, это довольно ужасная идея - вам лучше использовать только файлы cookie, защищенные только SSL.