IP Banning - самый эффективный способ? - PullRequest
3 голосов
/ 04 февраля 2011

Я управляю большим форумом и, как и у всех, есть проблемы со спаммерами / ботами.Существуют огромные списки известных спам-IP-адресов, которые вы можете загрузить и использовать в форме htaccess, но меня беспокоит только размер файла.Итак, я полагаю, что вопрос в том, насколько большой слишком большой, учитывая, что он будет загружаться для каждого пользователя.Добавление всех IP-адресов в нем достигает примерно 100 КБ.

Есть ли альтернатива, которая будет иметь меньше накладных расходов?Возможно, сделав это с php, или это также приведет к некоторой большой нагрузке из-за размера файла и проверки ips и т. Д.* Стив

Ответы [ 8 ]

2 голосов
/ 04 февраля 2011

Часто есть более эффективные способы, чем запреты IP.Например, скрытые поля в форме будут заполнены только ботами, или для отправки форм требуются javascript или cookie.

Для запрета IP я не буду использовать файлы .htaccess.В зависимости от вашего веб-сервера он может читать файлы htaccess для каждого запроса.Вместо этого я определенно добавлю IP-запреты в конфигурацию вашего хоста.Таким образом, я был бы уверен, что веб-сервер будет хранить его в оперативной памяти и не будет читать его снова и снова.

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

1 голос
/ 04 февраля 2011

Есть несколько вариантов:

  • Вы можете сохранить список заблокированных в базе данных. Запрашивать там гораздо эффективнее, чем с помощью цикла в PHP.
  • Вы можете предварительно обработать список с помощью array_map (ip2long ()), чтобы сохранить память и, возможно, время поиска.
  • Вы можете упаковать список IP-адресов в регулярное выражение, возможно, запустить его через оптимизатор (Perl Regexp :: Optimizer). PCRE тестирование снова будет быстрее, чем тесты foreach и strpos. $regex = implode("|", array_map("preg_quote", file("ip.txt")));

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

0 голосов
/ 10 июня 2015

В .htaccess в вашем DocumentRoot, после:

Order Deny,Allow

Добавить строку:

Deny from <black ip>
0 голосов
/ 04 февраля 2011

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

Прочтите http://www.cyberciti.biz/tips/how-do-i-drop-or-block-attackers-ip-with-null-routes.html

http://php.net/manual/en/function.shell-exec.php

0 голосов
/ 04 февраля 2011

Не используйте такие списки IP. Они могут устареть, и вы можете заблокировать неправильные запросы. Просто вкладывайте деньги в хорошие или лучшие капчи и время от времени блокируйте IP-адреса только в том случае, если они действительно совершают атаку типа «отказ в обслуживании».

0 голосов
/ 04 февраля 2011

Если у вас уже нет проблем с нагрузкой на ваш сервер, вы, вероятно, не заметите разницы с файлом .htaccess размером 100 КБ. Могут быть более быстрые альтернативы, возможно, включая использование iptables или использование отсортированных списков ip, которые можно быстрее искать на предмет совпадений, или даже использование базы данных (хотя накладные расходы на один запрос к базе данных могут разрушить преимущество индексированных таблиц ) но это, вероятно, не стоит усилий, если вы не запускаете форум с высокими нагрузками.

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

0 голосов
/ 04 февраля 2011

может быть, вы хотите остановить спам по-доброму пути - Капча ?

Я считаю, что однажды мистер Альберт Эйнштейн сказал: Проблемы не могут быть решены в одно и то же времяуровень осведомленности, который их создал:)

0 голосов
/ 04 февраля 2011

Ну, вы строите базу данных адресов, верно?Не было бы полезно использовать для этого продукт database ?Если у вас его еще нет, возможно, SQLite справится с этой задачей.

...