Хакеры очень часто сохраняют Web-страницы на своем диске для изучения и корректировки параметров, например, параметров передаваемых методом POST. Данная защита не позволит отправлять данные на Ваш web-сервер таким образом, что предотвратит «подделку» заголовков.
У РНР есть одна интересная переменная окружения: $HTTP_REFERER. В ней должен находиться путь к файлу, из которого был запущен сценарий. Давайте создадим файл env.php со следующим содержимым:
<form action="env.php" method="get"> <В>Введите какой-нибудь текст</В> <BR>Текст: <input name="server"> <BR><input type="submit" value="OK"> </form> <?php print($HTTP_REFERER); ?>
Здесь определены форма для ввода текста и передачи его сценарию и РНР-код, который выводит на Web-страницу содержимое переменной $HTTP_REFERER. Загрузите этот сценарий в браузер. В результате на экране помимо формы для ввода текста может быть выведен путь к файлу, откуда
был запущен сценарий, но при запуске он может быть и пустым. Теперь попробуйте ввести какой-нибудь текст в поле ввода и передать его серверу. Вот теперь переменная $HTTP_REFERER ТОЧНО должна отражать путь. В моем случае на Web-странице я увидел http://192.168.77.1/env.php, здесь 192.168.77.1 — это IP-адрес компьютера, где у меня установлен Linux с Web-сервером Apache+PHP.
Теперь попробуем сохранить файл на своем жестком диске и исправим путь в поле action формы так, чтобы данные формы передавались Web-серверу:
<form action="http://192.168.77.1/env.php" method="get"> <В>Введите какой-нибудь текст</В> <BR>TeKcr: <input name="server"> <BR><input type="submit" value="OK"> </form> <?php print($HTTP_REFERER); ?>
Хакеры очень часто сохраняют Web-страницы на своем диске для изучения и корректировки параметров, например, параметров передаваемых методом POST. Загрузите этот файл со своего жесткого диска и попробуйте теперь передать параметр серверу. Так как в данном случае сценарий запускается не с сервера, то переменная HTTP_REFERER будет содержать что угодно, но только не адрес сервера 192.168.77.1. Таким образом, в сценарии можно сделать следующую защиту:
<?php if (isset($server)) { if (!ereg("^192\.1б8.8\.88")) { die("He стоит так взламывать сайт"); } } ?>
Теперь сохранить страницу на локальном жестком диске будет сложнее.
Comments ( 0 )