Проверка подлинности данных формы

Существует способ причинения вреда сайту, при котором определенная форма сохраняется на жесткий диск злоумышленника, изменяется параметр action и обращение к серверу происходит непосредственно с удаленного компьютера. Это делается с целью обхода проверки передаваемых данных средствами JavaScript, автоматизации подбора пароля, флуда и т.д.

Защититься от этого можно с помощью переменной окружения HTTP_REFERER. В ней содержится адрес страницы, с которой был осуществлен переход. Например, если имя вашего домена www.some.com, то оно обязательно будет присутствовать в HTTP_REFERER при переходах внутри сайта. То есть в сценарии можно сделать следующую защиту:

if(!eregi("some.com", $_SERVER['HTTP_REFERER'])) die("Несанкционированное обращение!");

проблемы:

  • переменной HTTP_REFERER нельзя полностью довериться, поскольку она может быть изменена на стороне клиента, но все же рассмотренный способ является хорошей защитой «от дурака»

12 Комментарии “Проверка подлинности данных формы

  1. как и написано в статье данный способ не является очень серьезной защитой от CSS, но как средство "от дурака" вполне сгодится.
    что мешает вам проверять, например, ip адрес, а не имя домена?

  2. Alek Veritov
    ты ваще не шаришь, чувак…
    CSS ??? наверно имелось ввиду XSS
    далее — eregi не канает, юзай preg
    причем тут ip и имя домена?? клиент не отдает серверу ip реферера
    ну и т.д.
    в общем лучше не пиши про то, чего не знаешь

  3. Londeren, рад, что ты "шаришь". XSS — это стилизованная аббревиатура Cross Site Scripting, так что можно (и даже правильнее) CSS! А стилизовали до XSS ее для того, чтобы "шарилы" понимали о чем речь и не путали с Cascading Style Sheets. Не веришь, спроси у гугла. А почему "eregi не канает"? А где, интересно, на данной странице я утверждаю, что "клиент отдает серверу ip реферера"? Я сказал, что можно проверять ip, но не говорил, что с помощью HTTP_REFERER…

  4. почему некоторые идиоты… все время хотят испортить хорошие сайты своими идиотскими коментариями… ну не нравиться и флаг тебе в руки… катись да… колобок…

  5. лучше всего, проверять ip юзера при попытке выполнения входа
    и вставлять его в таблицу (ip, time),и если он часто пытается войти, выкидывать его в "сторону"

  6. Лучше всего использовать сессии. <?php // Запускаем сессию session_start(); // Регистрируем в сессии некоторое значение например имя пользователя // для большей безопасности пременяем функцю md5() $name = "Вася"; $name = md5($name); $_SESSION['name'] = $name; ?> <html> <head> <title></title> </head> <body> <form name="" action="action.php" method="post"> <!— Тело формы —> <input name="check" type="hidden" value="<?php echo $_SESSION['name']; ?>"> </form> </body> </html> action.php <?php // Запускаем сессию session_start(); // Получаем данные из скрытого поля $check = $_POST['check']; // Сравниваем данные полученные из формы с данными в нашей сессии if ( $check === $_SESSION['name'] { // Все хорошо } else { die ("HACKING ATTEMPT !!! "); } ?>

  7. Проще доверять проверку заполнения формы не джаваскрипту на стороне клиента, а пхп на сервере

  8. Проверку лучше дублировать на PHP. По поводу загрузки с левых страниц, можно сделать так: Главная или другая страница, с которой идет обращение к обработчику: $_SESSION['fromSite'] = 1; Обработчик: if(!$_SESSION['fromSite']) die('Это не хорошо.'); Это защита от более умного дурака.

  9. что за тупизм данные сессии палить в скрытом поле формы?: <input name="check" type="hidden" value="<?php echo $_SESSION['name']; ?>">- вы думаете боты(не юзеры, которые исходный код могут не смотреть) не считают значение поля hidden? пусть вводит значение, а оно сверяется со значением $_SESSION['name']-(не надо его палить, оно из сессии никуда не денется, пока не обновится)

  10. и еще, к администрации сайта, раз уж вы зарабатываете на рекламе от гугла, то неприлично не делать ссылку на закачку googlechrome PS для пользователей internet explorera PPS я сам зашел через хром, но смотрел исходный код, чтоб понятней было и увидел несправедливость

  11. Уважаемы забудьте раз и навсегда, о том что если в форме есть скрытое поле/поля то "дурак" не сможет чего-то там отправить… Сейчас актуально js+php, и притом что алгоритм на php должен проверять результат работы js. Уверен что проверка порядка POST данных позволит защититься, от не совершенных парсеров форм.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *