
[ Проверка заголовка Referer как один из способов борьбы со спамерами. ]
Date: 22.01.03
Многие думают, что ограничения, установленные в поля формы, а также значения полей типа "hidden"
не могут быть модифицированы. Однако это не так.
Никто не может помешать взломщику открыть сорс и посмотреть значения скрытых
полей в исходном коде страницы, затем скопировать страницу на свой диск,
модифицировать скрытые поля по своему усмотрению и проверить скрипт на прочность.
Такой метод используется спамерами для засорения гостевых книг, форумов, досок объявлений и т.п.
Одним из способов, помогающих противостоять спамерам, является проверка переменной окружения
HTTP_REFERER, хранящей URL страницы, с которой был вызван скрипт. Таким образом, если
HTTP_REFERER указывает на адрес, не имеющий ничего общего с адресом вашего сайта,
можно смело игнорировать этот вызов, рассматривая его как атаку.
Все бы хорошо, если бы не одно "НО"!
Переменная HTTP_REFERER получает свое значение из http-запроса Referer, передаваемого клиентом.
Конечно, если пользователь использует обычный броузер в роли клиента,
то заголовок заполнится как нужно.
Однако взломщик может использовать свой броузер или специально написанный скрипт
вместо стандартного броузера-клиента для осуществления запроса, что позволит
подделать заголовок Referer.
Вот пример такого скрипта, написанного на Перле:
#!/usr/bin/perl -w
use Socket;
$proto=getprotobyname('tcp');
socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto);
$port=80;
$host="www.victim.com";
$sin=sockaddr_in($port,inet_aton($host));
connect(Socket_Handle,$sin);
send Socket_Handle, "GET /cgi-bin/env.cgi?".
"param1=val1¶m2=val2 HTTP/1.0\n",0;
send Socket_Handle,"Referer: any referer you wish\n",0;
send Socket_Handle,"User-Agent: my agent\n",0;
send Socket_Handle,"\n",0;
while ()
{
print;
}
close (Socket_Handle);
На этом все.
До встречи!
{dr}{NerVe}     [KODSWEB]
!!! Статья является собственностью команды KODSWEB !!!
!!! Любое распространение без нашего разрешения строго запрешено !!!
|