PHP: система антилавинной рассылки/Спама

Я на самом деле работаю над проектом PHP, который покажет пользовательскую систему (Вход в систему, Регистр, Отправьте потерянный пароль в электронную почту..) и я думаю, что это может быть очень уязвимо для Атак перебором, и/или Спам (Отправьте пароль в чью-то электронную почту как 1 000 раз, и т.д. используйте свою фантазию).

  • Сегодняшние веб-серверы (Apache, IIS) имеют своего рода встроенную защиту против "В лоб"?
  • Что было бы лучшим способом реализовать систему Антиспама/Лавинной рассылки, если я, например: хочу страницу не быть в состоянии быть названным больше чем два раза в минуту, однако другую страницу можно назвать до 100 раз в минуту или около этого.

    • Я должен был бы определенно сохранить адреса IP, время, когда они в последний раз посетили страницу и количество посещений где-нибудь - но будут оно быть достаточно эффективным хранением его в текстовом файле/базе данных (MySQL)

    • Я должен использовать капчи для вещей как регистрация/восстановление потерянных паролей?

    • Действительно ли "текстовые" капчи жизнеспособны? (Что-то как, "Что 5 плюс 9 минус 2?")

    • Страница не будет использоваться этим многие пользователи (100-200), я должен на самом деле реализовать все эти вещи?

11
задан lamas 29 January 2010 в 14:27
поделиться

6 ответов

Относительно CAPTCHAS: Я бы порекомендовал против использования CAPTCHA, если вам это действительно не нужно. Почему?

  1. Это уродливо.
  2. Это раздражает для ваших пользователей. Вы не должны заставлять их прыгать через обручи, чтобы использовать ваш сайт.

Есть некоторые альтернативы, которые очень просты, могут быть очень эффективными и полностью прозрачны в (почти все) пользователей.

  1. Поля Honeypot : добавьте поле в свои формы с общим названием, такими как «сайт». Рядом с ним добавьте этикетку, говорящее что-то в силу «Не пишите в этой коробке». Использование JavaScript скрыть вход и метку. Когда вы получите представление формы, если в поле есть что-то, отклоните ввод.

    Пользователи с JS не увидят это и будут в порядке. Пользователи без JS просто должны будут следовать простому инструкции. Спамуты упадут для этого и раскрывают себя.

  2. Автоматическая искусственная капча : Это похоже на вышесказанное. Добавьте поле ввода с этикеткой, говоря «Написать« Алекс » (например). Используя JavaScript (и знать, что большинство автоматизированных спам-ботов не будут работать JS), скрывайте поле и заполните его «Алекс». Если представленная форма не имеет волшебного слова там, то игнорируйте его.

    Пользователи с JS не увидят это и будут в порядке. Пользователи без JS просто должны будут следовать простому инструкции. Spamots не будет знать, что делать, и вы можете игнорировать свой вклад.

Это защитит вас от 99,9% автоматических спам-ботов. То, что это не будет делать, даже в малейшем, не защищает вас от целевой атаки. Кто-то может настроить свой бот, чтобы избежать видажирования или всегда заполнять правильное значение.


Что касается блокировки грубой силы: решение для сервера - это единственный жизнеспособный способ сделать это, очевидно. Для одного из моих текущих проектов я реализовал систему защиты грубой силы, очень похожую на то, что вы описываете. Он был основан на этом плагин защиты грубой силы для CakePhp.

Алгоритм довольно прост, но немного запутанный изначально.

  1. Пользователь запрашивает некоторое действие (например, пароль сброса)
  2. RUN: Удалить * from brute_force, где истекает <теперь ()
  3. RUN:

     Выберите COUNT (*) от Brute_Force
    Где действие = 'passwordReset'
    И IP = <их IP-адрес>
     
  4. Если счет больше x , то скажите им, чтобы подождать некоторое время.
  5. В противном случае запустить:

     Вставить в Brute_Force (IP, действие, истекает)
    Значения (<их IP-адрес>, «PasswordRESET», сейчас () + Y минут)
     
  6. Продолжайте движение с функцией сброса пароля.

Это позволит пользователям только попробовать сбросить пароль X раз в минутах. Настроить эти значения, как вы видите подходящие. Возможно, 3 сбрасываются через 5 минут? Кроме того, вы можете иметь разные значения для каждого действия: для некоторых вещей (например,: генерировать PDF), вы можете ограничить его до 10 за 10 минут.

20
ответ дан 3 December 2019 в 04:32
поделиться
  1. Да, хранение IP-адреса, последний доступ и время доступ к базе данных, будет в порядке.
  2. Использование CAPTCHAS для регистрации / восстановления пароля рекомендуется, чтобы адреса электронной почты не могут быть уражены. Также прекратить грубое насилие.
  3. Да, текст CAPTCHAS возможен, хотя для кого-то гораздо легче взломать и написать сценарий для автоматизации ответа. Для бесплатной капчи я бы порекомендовал recaptcha .
  4. Это действительно зависит от того, насколько вы заботитесь о безопасности. Я бы, наверняка рекомендую использовать капчу, поскольку они просты в реализации.
5
ответ дан 3 December 2019 в 04:32
поделиться

Помимо того, что газер говорит вам, вы также должны иметь какой-то способ подсчета попыток входа в систему в целом. Это всего, что все попытки входа в систему больше, чем X, то либо начинаю использовать команду сна или просто сказать, что серверы имеют высокую нагрузку.

0
ответ дан 3 December 2019 в 04:32
поделиться

Не пытайтесь реализовать Все логика в вашем PHP - чем ниже в вашем стеке. , тем более эффективно это может быть решено.

Большинство брандмауэров (в том числе iptables на BSD / Linux) имеют дросселирование. Также взгляните на MOD_SECURITY для предотвращения предотвращения атаки DDOS / Brute.

Вы должны . может ограничить его эффективность.

Несколько ценностей, полагаясь на постоянный IP-адрес от вашего нападающего - есть много способов обойти это.

E.G. Следите за количеством запросов сброса пароля между логинами каждого пользователя. В вашей форме сброса пароля отвечайте (клиенту) в ровно так же, если пользователь представляет собой неизвестный адрес электронной почты. Журнал неверных адресов электронной почты.

кв.

c.

1
ответ дан 3 December 2019 в 04:32
поделиться

конечно, ваша целевая аудитория может быть не большой, но если она находится в общественном достоянии, то она уязвима,

текстовые капчи легко взломаны в эти дни поверьте мне

для системы против спама/потоков вы могли бы записать IP-адреса (предпочтительно MySQL) и добавить ограничение по времени повторных попыток входа

-1
ответ дан 3 December 2019 в 04:32
поделиться

Хранение IP-адресов является хорошей практикой для входа в систему и отслеживания, но я думаю, что только капча остановит спам, атаки брутальными силами и флуд.

Рекапча действительно хорошее решение.

-1
ответ дан 3 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: