Если скрипт каптчи сам определяет правильность ответа производя собственные расчет, а не беря данные из бд, то какие проблемы сделать тоже самое боту?! Идея - бред На выбор около 100 ответов... Кто будет выбирать?
Я вообще против сложных каптч, но в теории можно найти банк картинок с несколькими миллионами изображений и ключевыми словами к ним. Вытянуть картинки и добавить в свою бд ответы... Минусы: некоторые картинки могут быть неочевидны. Пример: эта картика была выведена в одном банке изображений по запросу "email" если взломщик узнает какой банк картинок вы используете, никто ему непомешает взять все картинки оттуда и сравнивать их теми, что выводит ваш скрипт...
Есть еще один способ защиты от спамоботов - переменные названия полей ввода. Т.е. мы имеем форму, допустим, с 2 полями, для имени и для сообщения: Code: Ваше Имя: <input type="text" name="UserName" value="" /> Ваш текст: <input type="text" name="Post" value="" /> Такая постановка вопроса боту очень даже удобна. Но что он скажет на такую вот форму: Code: Ваше Имя: <input type="text" name="eyWUpIFC6J1JcHPYWQLd" value="" /> Ваш текст: <input type="text" name="qgyoPxauUq8tQEXxpUer" value="" /> В этом случае имя поля ввода генерируется случайным образом при каждой выдаче формы пользователю (или при получении данных из формы от оного, для экономии ресурсов), хранятся в сессии и ждут получения данных пользователя. Но есть "но": Легко вытянуть имя поля, зная контекст его использования. Благо эту ситуевину можно решить, используя JavaScript/AJAX Еще одно но в плане юзабилити: Все автодополнения в браузерах идут лесом, т.к. они привязываются к имени поля. Как еще одно звено в защите можно использовать проверку времени заполнения формы, т.е. разницу между ее выдачей юзверю и получением данных. // Вряд-ли живой человек сможет написать пост на форум/коммент в блог за 5 секунд, а вот боту пыл поубавит. Еще сильный ход - отказаться от проверок во время отправки сообщения, а направить все силы на защиту от регистрации "неживого населения" на сайте, ессно при этом всем незареганным пользователям права ReadOnly.
Сравни скорость появления таких постов с задержкой и без оной. Хоть мелкая, но победа. А что решать-то? Простейший скрипт, который меняет имена полей ввода, согласно указанному при генерации их названий порядку. Как усложнение жизни бота, код ентот вполне можно получать через AJAX, объединив работу mod_rewrite и еще пары переменных (код каждый раз по новому url-у). Или сделать целую подборку скриптов, которые тасуют поля по разным алгоритмам, получая на входе все тот-же ключик.
Я в своих скриптах использую блокировку отправления которая равна трем секундам. За три секунды реальный юзер может исправить в форме если первично что-то ввел неверно и нажать кнопку submit... С задержкой три секунды бот отправит 20 в сообщений в минуту. Если ставить блокировку более трех секунд, ты введешь реальных юзеров в недоумение... Такую защиту можно использовать вместе с каптчей в любом случае Смысл в том, что бот увидев искомое слово "Ваше имя" (или его вариации если стоит ротатор), будет искать ближайшее поле для ввода текста и брать оттуда значение аттрубита name. Зачем ajax? Конечный html код будет иметь <input ...> в любом случае
А вот в том и дело, что он глянет значение атрибута name из кода, которое изначально не на своем месте, и отправит данные, по которым сразу спалится JavaScript на странице и будет для того, чтобы значения name по своим местам расставлять. И заниматься он должен этим не с фонаря а на основании кода, так вот чтобы этот код со страницы выдернуть было не реально и лучше всего заюзать AJAX.
PHP умеет работать с swf- создавать анимацию, что если создать капчу-флэшку? Мне кажется довольно мощная защита
Я лично делал следующую вешь от авторегистрации 1) форма содерит onSubmit обработчик 2) обработчик меняет адрес скрипта + криптует значения параметров + меняет 3) имена полей формы генерется взависимости от времяни. В принципе защита простая, но удобно, особенно когда юзается для защиты от спама поступающих через web формы сайта
И? декомпилятор покажет код флэшки, возможно удасться вылелить текст. Если передавать не текстовое поле, а рисовать векторно, Либо передавать туда картинки то будет надёжнее.