Our Blog

Защита от изменения формы

Хакеры очень часто сохраняют 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 )
    -->