Кто как борется со спамом в своих PHP-формах? Вот что у меня на практике проверено и работает:
1. Проверять, что все обязательные поля заполнены и в правильном формате – часто мусор летит с пустыми или подвальными значениями.
2. Использовать простую капчу (можно даже своя текстовая). Примитив, но многие боты с неё уже не проходят.
3. Проверять тайминги: если форма занимает на заполнение меньше пары секунд, скорее всего бот.
4. Проверять HTTP-заголовки (реферер, user-agent). Если что-то явно странное – отбрасывать.
5. Ограничить количество отправок с одного IP за короткий промежуток.
6. Сохранять сессию и проверять при отправке, чтобы не позволить напрямую пропихивать запросы.
7. Фильтровать ввод на наличие прописанных ссылок или подозрительных ключевых слов.
8. Логировать неудачные попытки, чтобы понять, откуда идет спам.
Это не панацея, но вместе уже неплохо работает. Кто какие ещё способы применяет? Может, что-то более эффективное и простое?
Добавлю простой honeypot — скрытое поле в форме, которое юзер не видит, а бот обычно заполняет. Это почти без заморочек и реально снижает количество спама без капч и тяжелых проверок.