Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > блокировка конкретного компьютера


Автор: koyot 29.1.2008, 01:25
Помогите - горю!!! smile 
Мне нужно закрыть доступ конкретного клиентского компьютера к моему сайту или, если не закрыть полный доступ, то хотя бы ограничить его возможности(не дать возможность зарегистрироваться и т.д.). Блокировка по IP не подходит. какими способами это можно реализовать?

Автор: Golda 29.1.2008, 02:40
Опишите проблему подробнее. Что именно делают с этого конкретного компьютера и в какой ситуации? Проблема в поведении пользователя-человека или бота? Что происходит: попытка DOS-атаки, спам через  Вашу форму, захват управления через дыру типа SQL-инъекции... ? В зависимости от этого защита будет разной. Опишите СВОЮ КОНКРЕТНУЮ проблему. Поскольку общего решения не существует. Достоверно пользователя идентифицировать нельзя

В общем случае идентифицировать пользователя можно двумя путями: 
  • анализ конкретного запроса. Тут Вам доступны IP, HTTP-заголовки запроса, в частности, куки и GET и  POST параметры запроса
  • анализ поведения пользователя по истории его запросов в рамках одной сессии. Причем сессия может быть отслежена либо по сессионной переменной (в COOKIES, GET или POST), либо по одинаковому IP, либо по общему набору заголовков

HTTP-заголовки легко подделываются, например, тем же скриптом на PHP. IP на уровне HTTP-протокола подделать нельзя, но можно подменить, используя прокси. Все же на протяжении некоторого промежутка времени обычно IP сохраняется, количество доступных IP не безгранично. Заголовки хоть и могут быть указаны произвольные, но для данного пользователя в них можно проследить закономерность. Кстати, отсутствие какого-то заголовка из тех, на которые Вы хотели рассчитывать - тоже информация.

HTTP_REFERER неожиданный или отсутствует в ситуации, где не должен - информация.
USER_AGENT из блек-листов, отсутствует или меняется при одном и том же идентификаторе сессиии или IP - информация. Правда, с IP тут нужно быть осторожнее, возможны и легальные случаи. Возьмите на заметку и анализируйте дальше.
В форме есть кнопка <input type='image'/> и Вы видите несколько запросов с одинаковой точкой нажатия - информация
Запросы с похожим набором заголовков через равные или очень быстрые промежутки времени - информация
Запросы с повторяющимися парамметрами - информация
Запросы с явным поиском распространенных уязвимостей в параметрах - информация
И т.д.

Ни на один из вышеперечисленных моментов сам по себе расчитывать нельзя. Каждый из них может быть подменен. Но что-нибудь да забудут. Покопайтесь в логах, если нужно, скриптом составьте более подробные логи. Найдите профиль своего пользователя. И отсекайте его запросы по этим особенностям. Только нужно учесть, что и пользователь, если заинтересован в Вашем ресурсе, может менять поведение.

Вообще, вернусь к началу. Опишите проблему. Может, в Вашем случае защита должна состоять в том, чтобы сделать использование ресурса неэффективным, неинтересным для злонамеренного пользователя. Может, где-то добавить барьер в виде дополнительного этапа верификации пользователя. Смотреть нужно

Автор: koyot 29.1.2008, 10:46
Golda, вот суть проблемы: у меня на сайте пользователь регистрируется и занимается спамом. У меня есть, так называемый, "чёрный список", куда заносятся подобные товарищи. IP адрес у него динамический. Я бы без вопросов заблокировал всю подсеть, но тут вновь засада - он научился пользоваться прокси. тут я и зашёл в тупик. 

Автор: MoLeX 29.1.2008, 10:54
koyot в какойто теме я приводил пример. ИМХО: узнать как можно больше об компьютере пользователя и если он злодей то эти индификаторы в бан и баста

Автор: GeneralElectric 29.1.2008, 11:34
Надо разбираться с конкретным случаем. 

Все так же - поиски способа не прекратить спам, а заблокировать клиентский компьютер. 


 ! 
PARROT
Прекратите ругаться, хотите отвечайте, нет, проходите мимо. Флейм удален. В след. раз будет предупреждение.

Автор: koyot 29.1.2008, 20:28
GeneralElectric, вот по этому поводу я и прошу помощи. Просто не знаю, какой ещё способ придумать.
может, возможно как-нибудь определить МАС адрес карты или ID материнки?

Автор: Golda 30.1.2008, 01:39
Поищите, что общего в запросах этого пользователя помимо IP. Временный бан по IP, кстати, можно использовать и в этом случае, если научиться определять профиль его запросов.

Если есть четкие особенности поведения, можете по ним отсекать запросы. Используется бот или работает человек? Может, полуавтомат? На что больше похоже? Если бот,  может просто добавите какой-нибудь этап типа CAPTCHA?


Цитата(koyot @  29.1.2008,  20:28 Найти цитируемый пост)
может, возможно как-нибудь определить МАС адрес карты или ID материнки?


Средствами чистого php - невозможно.  Разве что MAC адрес машины из локальной сети. PHP на сервере работает. А данные нужны - клиента. Причем такие, к которым javascript доступа не имеет. Разве что у пользователя кстати окажется установлен какой-нибудь ActiveX, получающий такую информацию. Тогда javascript к нему доступ получит. Но это уже из области вирусов.

Попробуйте проанализировать сами спам-сообщения. Может, удастся выделить достаточно много общего, чтобы блокировать обработку таких сообщений. Можно усилить этот вариант временным баном по IP. Как минимум, усложните спамеру жизнь, заставив чаще прокси менять.

Анализируйте заголовки запроса. Что общего между двумя запросами? Что отличается? Какой поднабор заголовков используется...?

Автор: sTa1kEr 30.1.2008, 19:18
Цитата(koyot @  29.1.2008,  11:46 Найти цитируемый пост)
Я бы без вопросов заблокировал всю подсеть, но тут вновь засада - он научился пользоваться прокси. тут я и зашёл в тупик.  

Если вкратце, то минимум, который можно сделать, что бы обнаружить таких спамеров
  • Определить используется ли прокси сервер по соответствующим заголовкам. 
  • Попытаться определить настоящий IP пользователя. Этот вопрос неплохо был расписан в теме http://forum.vingrad.ru/index.php?showtopic=165664
  • Если IP определить не удалось, либо этот IP не забанен, то проверить не занесен ли этот Proxy в http://ru.wikipedia.org/wiki/RBL. Как это сделать я писал http://forum.vingrad.ru/index.php?showtopic=165702&view=findpost&p=1212886, а так же есть куча примеров в комментах описания функции http://ru2.php.net/manual/ru/function.gethostbyname.php.
  • Соответственно, если проксик занесен в DNSBL, то сказать пользователю, что его прокси в черном списке, либо просто сказать, что такой IP забанен.
Большинство пользователей используют именно публичные прокси, т.к. их просто достать и они бесплатные, но, к счастью, по этой же причине их так же просто занести в блек лист, поэтому такая проверка отсеит львиную долю (я думаю процентов 95...) всех любителей скрывать свой IP. Для большей надежности можно даже проверять все IP, даже те, для которых не удалось определить используется ли прокси сервер (только в этом случае нужно обязательно убедится, что DNS запросы кэшируются на хостинге/у провайдера, либо реализовать кэширование самому).

Конечно-же в этой схеме может случится, что под фильтр попадет обычный пользователь, но вероятность этого очень мала, т.к. ни один разумный пользователь не будет сидеть в интернете через тормазнутые публичные проксики (за исключением как-раз тех случаев, когда необходимо скрыть IP).

Это конечно не панацея, т.к. бывают еще платные проксики (не путать с платными прокси-листами - это просто список публичных прокси за деньги) и прокси-трояны. Но если при помощи первых вряд-ли кто-то реально будет скрывать свой IP (т.к. это очень накладно выйдет), то со вторыми крайне тяжело бороться. Но я думаю, что в вашем случае спамер вряд-ли использует прокси-трояны smile

Автор: GeneralElectric 30.1.2008, 19:24
Я считаю, что работа с контентом гораздо перспективнее шаманства с IP адресами.
Только вот упорное нежелание автора привести пример "хулиганства" наводит на определенные размышления...

Автор: koyot 31.1.2008, 14:22
Цитата(GeneralElectric @ 30.1.2008,  19:24)
Я считаю, что работа с контентом гораздо перспективнее шаманства с IP адресами.
Только вот упорное нежелание автора привести пример "хулиганства" наводит на определенные размышления...

Человек постоянно регистрируется на сайте (в день может доходить до 10-15 регистраций) и отправляет пользователям всякий бред, как правило, это реклама какой-то услуги или продукта.
Его настоящий IP известен, теперь он начал пользоваться бесплатными прокси.
Теперь, думаю, суть проблемы ясна.

Автор: sTa1kEr 31.1.2008, 17:49
Цитата(koyot @  31.1.2008,  15:22 Найти цитируемый пост)
Его настоящий IP известен, теперь он начал пользоваться бесплатными прокси.

koyot, не ужели так сложно пройтись по ссылкам что я привел?
Код

function isBlackProxy($ip)
{
   $rIp = implode(".", array_reverse(explode('.', $ip)));
   $host = gethostbyname($rIp.".xbl.spamhaus.org");
   return !($ip == $host);
}

if (isBlackProxy($_SERVER["REMOTE_ADDR"]))
{
   echo <<< EOS
<h1>Ваш IP адрес занесен в черный список.</h1>
IP адрес <b>{$_SERVER["REMOTE_ADDR"]}</b> был занесен в черный список, это могло случится по следующим причинам:
<ul>
   <li>У вас установлен или вы используете публичный прокси-сервер</li>
   <li>С вашего IP адреса происходила массовая рассылка спама</li>
   <li>Ваш компьютер заражен вирусом</li>
</ul>
Если вы считаете, что ваш IP адрес был занесен в черный список по ошибке, то свяжитесь с нами по адресу support@forum, сообщите ваш e-mail и IP адрес и мы попытаемся решить эту проблему.
EOS;
   exit();
}

Все. Скорее всего даже этого будет достаточно, что бы избавится от вашего спамера.

Автор: koyot 31.1.2008, 22:14
sTa1kEr,  это я описал проблему по просьбе GeneralElectric'a. 
По твоим ссылкам я прошёл и узнал кое-что новое для себя, за что я тебе благодарен

Автор: GeneralElectric 1.2.2008, 01:21
Это не описание проблемы, а повторение уже сказанного.
Вся суть "описания" свождится к двум словам - "регистрируется и спамит". Это мы уже слышали. Ничего нового ты не написал.

Как правильно объясняла Golda, методов может быть множество. А не один IP адрес на все случаи жизни.
но какой-то метод можно применить или посоветовать только если видеть конкретный спам, конкретные заголовки. Об этом шла речь, и именно это имело смысл приводить - реальные примеры, а не общие слова.

Автор: FractalizeR 1.2.2008, 02:07
Есть способы борьбы со спамом и помимо блокировки IP. Например, система akismet, которую пользует WordPress. http://akismet.com/

Интерфейс для проверки постов пользователя через akismet можно вытащить из Zend Framework.

Автор: sTa1kEr 1.2.2008, 17:27
Цитата(koyot @  31.1.2008,  23:14 Найти цитируемый пост)
По твоим ссылкам я прошёл и узнал кое-что новое для себя

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

Автор: koyot 10.7.2008, 22:56
sTa1kEr, спасибо за метод. Отлично работает. Некоторое время я им пользовался, но, к сожалению, пришлось отказаться.
Он мне по ошибке и нормальных пользователей бил. Но я метод немного модифицировал - поэтому сейчас всё в порядке.
Еще раз спасибо.

Автор: Павeл 14.7.2008, 18:40
Простите, а не проще ли поставить капчу на форму рассылки или еще какую-нибудь проверку на роботов? Вряд ли это спамит живой человек, кому охота по 15 раз в сутки регистрироваться. Наверное это робот. Так поставьте защиту от роботов.

Автор: koyot 15.7.2008, 01:39
Нет, Павел. Это живой человек спамил. Уровни защиты и анализ работы данного человека показали, что это точно был не робот.

Автор: Павeл 15.7.2008, 03:34
Понятно.
Ну а сейчас все нормально? Метод работает?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)