Как отфильтровать этого бота / предотвратить эту «атаку»?

В моем приложении symfony2 я допустил ошибку несколько дней назад, и на одной конкретной странице несвязанный пользователь мог публиковать любые данные в форме без какой-либо проверки.

Теперь это было решено после того, как я получил более 500 записей ненужного контента менее чем за 1 час.

Теперь, несмотря на то, что вредоносная программа больше не может публиковать сообщения, она все равно посещает эту единственную страницу, раз в минуту. У меня есть просмотр на этой же странице, который затем надувается ненормально.

Я пытался отфильтровать ботов, но кажется, что это умный. Мой код:

public function increaseViewCount(ViewCountInterface $entity, $andFlush = true)
{
$detector = $this->get('vipx_bot_detect.detector');
$id = 'viewcount' . get_class($entity) . $entity->getId();

if
(
(empty($_SERVER['HTTP_USER_AGENT']) || !preg_match('~(bot|crawl|slurp|spider)~i', $_SERVER['HTTP_USER_AGENT']))
&& strstr($this->get('request')->headers->get('referer'), 'foodmeup')
&& $detector->detectFromRequest($this->container->get('request')) === null
&& $this->get('session')->get($id) == false
)
{
$entity->increaseCount();
$this->persist($entity);
if ($andFlush) $this->flush($entity);
$this->get('journal_manager')->addJournalEntry('view', array(
'HTTP_USER_AGENT' => $_SERVER['HTTP_USER_AGENT'],
'REMOTE_ADDR' => $_SERVER['REMOTE_ADDR'],
'time' => time(),
'date' => date("d/m/Y H:i:s"),
'referer' => $this->get('request')->headers->get('referer')
), $entity->getId(), get_class($entity));
$this->get('session')->set($id, true);
}

return $this;
}

Однако (как вы видите, я зарегистрировал запись) я получаю следующий результат: пользовательский агент не содержит имени бота.

Paramètre   Valeur
HTTP_USER_AGENT Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 YaBrowser/14.10.2062.12521 Safari/537.36
REMOTE_ADDR 91.200.12.7
time    1430510089
date    01/05/2015 21:54:49
referer mywebsite/permettre-de-suggerer-une-photo-sur-les-elements-qui-n-en-ont-pas

Итак, у меня есть свой IP, и я выяснил, что последние 100 посещений за последний час все пришли откуда-то из Украины.

Тем не менее, когда я проверяю свою учетную запись googleAnalytics, этих посещений не наблюдается.

  • Итак, как я могу решить эту проблему?
    • Является ли реализация Javascript ViewCount самым безопасным способом?
    • Я еще не установил ловушку для бота, но здесь IP-адрес меняется каждый раз, поэтому я не уверен, что в этом случае это сработает.
    • Какие еще данные я могу получить, чтобы лучше понять, как решить эту проблему?

0

Решение

Добавьте Deny в вашу конфигурацию Apache — это может сделать:

Deny from 91.0.0.0/8

http://httpd.apache.org/docs/2.2/howto/access.html#host

Используйте это с осторожностью — потому что это заблокирует все запросы от этого блока IP CIDR. http://whois.arin.net/rest/net/NET-91-0-0-0-1/pft

0

Другие решения

Единственный правильный способ — очистить все входные данные на стороне сервера, как вы это сделали в конце концов. Блокировка диапазона IP / 8 настолько бессердечна, что я даже не могу описать, какая это серьезная халатность.
Если бы я предложил действительно избыточный способ обеспечения этого, это был бы обратный прокси-сервер. Это сделало бы некоторый элементарный анализ шаблона просмотра и разблокировало бы публикацию для пользователя, который загрузил файлы ожидаемым способом. Если продвинуться дальше, он также может рандомизировать имена полей POST, которые ожидает ваш сервер, но я полагаю, что на этом этапе позолота лилии.

0

По вопросам рекламы [email protected]