как защититься от fsockopen???

shurc900

Новичок
как защититься от fsockopen???

Здравствуйте.
Назрела реальна проблема. Никак не могу придумать, как можно распознать, откуда производится передача GET or POST data на мой сайт. Поскольку при использовании функции fsockopen можно подделать не только все скрытые и нескрытые поля формы, но и Referer, и сессию и т.д.... даже не знаю за что уцепиться.
А вопрос состоит в том, чтобы я мог наверняка определить с моего ли сайта передаются GET/POST данные из формы или это какой-то хитрый ламер пытается бесплатно воспользоваться сервисами размещенными на моем сайте.
Лог ИП и прокси само собой. Но ограничивать я никого и не в чем не собираюсь, главное, чтобы с формой работал пользователь, находящийся на странице моего сайта, а не на удаленном хосте.

<?
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
 

cDLEON

Онанист РНРСlub
Гыгы....
Забиндить веб-сервер на локальный ИПшнеГ :D
А по теме....Используйте каптчу
 

hammet

Новичок
becool возможно имелось ввиду для защиты форм...
добавлять хидден поле с ид сессии??...но это ламерство.
глянь PEAR Text CAPTCHA

-~{}~ 21.12.07 12:19:

upd. гы - у меня сотня :)
 

Фанат

oncle terrible
Команда форума
А вопрос состоит в том, чтобы я мог наверняка определить с моего ли сайта передаются GET/POST данные из формы
Это ключевой вопрос современности.
Лишь мизерное количество веб-программистов знают, что GET/POST данные передаются не с сайта =)
 

korchasa

LIMB infected
Re: как защититься от fsockopen???

Автор оригинала: shurc900
А вопрос состоит в том, чтобы я мог наверняка определить с моего ли сайта передаются GET/POST данные из формы или это какой-то хитрый ламер пытается
Намек: тот, кто использует сокеты вряд ли умеет исполнять js-код ;)
 

phprus

Moderator
Команда форума
korchasa
Намек: тот, кто использует сокеты вряд ли умеет исполнять js-код
А давно современные браузеры разучились исполнять JavaScript? Или браузеры использует не сокеты а темную энергию для передачи данных на сервер и для получения ответа от сервера?
 

korchasa

LIMB infected
Автор оригинала: phprus
korchasa
А давно современные браузеры разучились исполнять JavaScript? Или браузеры использует не сокеты а темную энергию для передачи данных на сервер и для получения ответа от сервера?
Злоумышленник у нас не пользуется браузером, судя по первому посту. И соответственно JS-код исполнять, скорее всего, не умеет. Соответственно на этом можно построить защиту.
...
Хм, я не прав. Если он собирается вставлять эту форму в свой сайт, то это не спасет, ибо он может вставить js-код к себе (поэтому же не будет работать и CAPTCHA).

Тогда все зависит от возможной активности пользователя, и накладываемых на него ограничениях. Если модель поведения, когда пользователь(IP) отправляет много запросов с небольшими промежутками времени между ними, является нормальной, то единственный способ защиты - регистрация. Пример - формы для отправки СМС.
 

Фанат

oncle terrible
Команда форума
korchasa
Судя по всему, ты не понял описанной проблемы.
Ты, видимо, хорошо знаешь яваскрипт, но плохо себе представляешь клиент-серверное программирование.
 

korchasa

LIMB infected
Автор оригинала: *****
korchasa
Судя по всему, ты не понял описанной проблемы.
Ты, видимо, хорошо знаешь яваскрипт, но плохо себе представляешь клиент-серверное программирование.
Проблему я понял следующим образом:
Есть сайт А хороший с каким то сервисом, реализуемым посредством формы. Есть сайт Б - злоумышленник, который взяв страницу формы выставляет ее у себя, получает данные от пользователя, и передает их скрипту, который обрабатывает оригинальную форму на сайте А. При этом он тщательно гримируется под браузер, и использует прокси для уменьшения количества запросов с одного IP.

Средствами HTTP отличить его невозможно. И сессия тут поможет только тем, что в ней можно гарантированно хранить количество запросов в пределах текущей сессии (не важно кто на другом конце: браузер или скрипт). CAPTCHA не поможет ни чем, ибо никто не мешает скрипту при формирования формы на сайте Б использовать оригинальную каптчу (напрямую, или проксированно) с сайта А. Так же не поможет и JS-код.
 

Фанат

oncle terrible
Команда форума
объясни поподробнее, что в твоем понимании означает "выставляет форму у себя, при этом тщательно маскируется под браузер". что значит слово "выставляет"?

сессия, даже при твоем понимании вопроса, не поможет.
подробнее - PHP FAQ: Сессии. Область применения.
 

korchasa

LIMB infected
Автор оригинала: *****
объясни поподробнее, что в твоем понимании означает "выставляет форму у себя, при этом тщательно маскируется под браузер". что значит слово "выставляет"?
Отрисовывает на своей странице, выводит. Согласен тут я немного перемудрил, просто приходилось сталкиваться с автоматическим построителем таких форм для спама на форумы. В общем случае тот кто делал сайт Б, просто посмотрел форму на сайте А и взял оттуда имена для параметров.

сессия, даже при твоем понимании вопроса, не поможет.
подробнее - PHP FAQ: Сессии. Область применения.
Поможет, если сделать ее обязательной, и привязывать к IP.
 

Фанат

oncle terrible
Команда форума
Отрисовывает на своей странице
а при чем здесь тогда маскировка под браузер?
Что он маскирует под браузер? В чем заключается тщательность?
Поможет, если сделать ее обязательной
читай снова =)

А бан по IP к сессиям не имеет никакого отношения
 

Alexandre

PHPПенсионер
как защититься от fsockopen???
ни как.
а вот защитить страницу от простой эмуляции GET/POST запроса можно.
есть несколько хитрых способов, один из них - использование яваскрипта,
еще один: тянется какой-нибудь едничный-гиф с sid. В сессию пишется, что то из переданных параметров. После отправки формы, проверяем наличие вызова этого гифа и то, что он записал...
есть еще другие способы... ;)
 

Фанат

oncle terrible
Команда форума
только не "защитить", а "немного затруднить эмуляцию"

надо быть точнее в формулировках
 

korchasa

LIMB infected
Автор оригинала: *****
а при чем здесь тогда маскировка под браузер?
Что он маскирует под браузер? В чем заключается тщательность?
Под браузер он маскирует свой скрипт который делает запрос на скрипт, обрабатывающий форму на сайте А.

А бан по IP к сессиям не имеет никакого отношения
Отслеживание пар сессия/ip еще один способ обнаружения ненормальных ситуаций. Я уверен, что есть фирмы в которых через один IP выходят несколько тысяч пользователей, но насколько вероятно, что они пойдут на один сайт?

Автор оригинала: Alexandre
ни как.
Ну почему же. Самый простой способ регистрация, и подсчет запросов для зарегистрированного пользователя.
 
Сверху