Каков наилучший подход к предотвращению спама при голосовании? т.е. как это делает Reddit
Reddit, как мы все знаем, разрешает около 1 голоса на ip-адрес на ссылку, чтобы избежать проблем со спамерами. Я работаю над приложением Slim, которое будет иметь функцию голосования, и, честно говоря, я не знаю, как внедрить подобную систему, поскольку у меня нет опыта работы с файлами cookie и собственными сеансами. Также большинство моих функций имеют такие пути, как (пример) localhost:8888/myapp/voiceup/item-to-voice.
2 ответа
На моем сайте я позволяю участникам оценивать код от 1 до 5 раз в 24 часа. Я прекращаю спам, добавляя хэш-код и используя ajax для отправки голосования. Я не получил ни одного голоса за спам с тех пор, как добавил его в июне 2012 года. Раньше я получал около 40 голосов в день от ботов, но сейчас это было устранено.
Например, вот так выглядит моя ссылка:
http://phpsnips.com/process/vote.php?id=43&vote=3&enc=a560e4320af4e13e4170947cd42de18b
При этом каждый раз, когда страница загружается, кодировка меняется, и после отправки голосования она снова изменяется.
Мои шаги
- Используйте сеанс для создания хеша md5
- разместите хеш по ссылке или создайте скрытое поле
- На странице отправки теста убедитесь, что сессия соответствует ссылке / полю
- Сбросить хэш
- Перенаправить обратно на исходную страницу (если не используется ajax)
Лучший способ сражаться с автоматизированными ботами - это запутать их. Скройте некоторые поля ввода текста, назовите их наоборот (поле имени, назовите их адрес электронной почты и сайт, назовите их имя и т. Д.)
Предпочитаю использовать только отправку Javascript, так что это может помочь уменьшить отправку формы извне. Использование CSRF также может помочь. Принудительное использование файлов cookie, пользовательских заголовков HTTP - все для обеспечения возможности воспроизведения только в браузере и без автоматизированных средств.
Также могут помочь логические вопросы, такие как "сколько стоит 1 + 1, запишите его" (ответ должен быть два, и сделайте это случайным) или "какой день недели начинается с W".