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

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

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

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

проблемы:

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

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

  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 не будет опубликован. Обязательные поля помечены *