Навеяно постом Form Spam Bot Blocker: Защищаем Web-формы без CAPTCHA!. Все предпосылки там.
Вариант модификации идеи :
1. В html-странице с комментом для каждой группы присутствуют несколько идентичных полей с разными id, например для поля сообщения поля «text», «message», «post», «comment» …
2. По умолчанию дополнительные поля скрыты, отображается только одно, каждый раз разное (например, сейчас показываем «message»)
3. Помимо этого на странице отображается каптча с полем для её ввода
4. Стиль подгружается из внешней генерируемой css-ки, в которую передается идентификатор сессии, аналогичный созданной html-ки
5. В стиле прописывается, какие поля будем отображать, какие скрывать — в нашем примере для группы «сообщение» скрываем все, кроме «post»
6. Так же в css-ке скрываем от взора пользователя каптчу и поле её ввода
Таким образом если браузер пользователя запросил сгенерированный стиль, у него отображается только поле «post», остальные поля скрыты. Если они будут изменены, принимающий скрипт поймет, что сделал это бот и отсечет его. Если же стиль не загружен, отображается классическая каптча. Так бот, который не подгрузил наш css, должен определить видимое поле и, не трогая остальные по смыслу очень похожие, заполнить его и каптчу. Ну или подгрузить css, проанализировать его и определить, какое поле отображается.
«Аномальным» пользователям (например тем, кто много комментит) при превышении нормативных значений показывать каптчу в принудительном порядке с включенными остальными элементами защиты.
Конечно, от целенаправленных жестких атак не убережет, но обычным юзерам сэкономит нервов.
PS: уточнения в комментах
Вариант модификации идеи :
1. В html-странице с комментом для каждой группы присутствуют несколько идентичных полей с разными id, например для поля сообщения поля «text», «message», «post», «comment» …
2. По умолчанию дополнительные поля скрыты, отображается только одно, каждый раз разное (например, сейчас показываем «message»)
3. Помимо этого на странице отображается каптча с полем для её ввода
4. Стиль подгружается из внешней генерируемой css-ки, в которую передается идентификатор сессии, аналогичный созданной html-ки
5. В стиле прописывается, какие поля будем отображать, какие скрывать — в нашем примере для группы «сообщение» скрываем все, кроме «post»
6. Так же в css-ке скрываем от взора пользователя каптчу и поле её ввода
Таким образом если браузер пользователя запросил сгенерированный стиль, у него отображается только поле «post», остальные поля скрыты. Если они будут изменены, принимающий скрипт поймет, что сделал это бот и отсечет его. Если же стиль не загружен, отображается классическая каптча. Так бот, который не подгрузил наш css, должен определить видимое поле и, не трогая остальные по смыслу очень похожие, заполнить его и каптчу. Ну или подгрузить css, проанализировать его и определить, какое поле отображается.
«Аномальным» пользователям (например тем, кто много комментит) при превышении нормативных значений показывать каптчу в принудительном порядке с включенными остальными элементами защиты.
Конечно, от целенаправленных жестких атак не убережет, но обычным юзерам сэкономит нервов.
PS: уточнения в комментах