Данный комментарий опубликован по просьбе друга, к сожалению инвайта на Хабре он не имеет, но очень хочет.
Мне иногда приходится писать различного рода ботов, некоторым из них приходится «распознавать капчи».
Всегда следует помнить, если очень надо пройти капчу на автомате, это все равно будет сделано. Поэтому надо для начала решить какой уровень защиты предоставляется. Моя статистика зоны ру показывает наличие более чем 50 000 блогов на Wordpress, если один из них придумает некую нестандартную защиту, никто конкретно для этого блога него не внесет и двух лишних символов в код программы-спамера, поэтому вполне сносно работают всякие бредозащиты типа «поставьте галочку „Я не робот“, как только такая защита становится популярной, естественно, этому будут обучены все роботы :)
Если что то в духе „Чтоб Wordpress комментами не забивали“ — хватит и простейших решений;
Если же речь идет о сервисе типа webmaster.yandex.ru — то никакая капча не спасет, ее будут обходить.
Вариантов обхода капчи естественно несколько, но всех их можно условно разбить на две группы:
1. OCR. т.е. „честное“ распознавание картинки программой.
2. Передача задачи распознавания какому-либо сервису. Адреса подобных сервисов знают все, кому они нужны :) На „том конце“ сервиса сидят реальные люди и под разными предлогами (будь то загрузка файла или заработок денег) руками распознают картинки.
Для того, чтобы 90% распознавателей из первой группы обломалось, достаточно, как ни странно, просто „слить“ некоторые буквы. Т.е. сделать так, чтобы небыло возможности автоматически разделить текст на отдельные буквы (когда символы разделены — все становится до неприличного просто). Сделать это можно хорошо и плохо. У recaptcha это сделано плохо (пользователь сам распознает с большим трудом) у webmaster.yandex.ru это сделано отлично (программе сложно ведь и ширина символов искажается, и четкой границы нет, а человеку довольно просто). Для того, чтобы отсечь остающиеся 10% упорных и „талантливых роботов“ нужно думать дальше, вариантов как всегда масса. Капчу Яндекса, насколько мне известно, не умеет распознавать ни один из „публичных“ ботов (т.е. тех, про которые пишут в сети, которых продают и покупают). Это отличная капча. Она проста для восприятия пользователем и довольно сложна для разбора программой.
А вот с сервисами, которых казалось бы обмануть очень сложно, бороться на деле проще: надо посмотреть как они работают. А практически все они работают по следующему принципу — пришли нам картинку, мы дадим тебе ID, зайди попозже, предъяви ID получишь распознанный текст. Все сервисы, которые знаю я, умеют принимать только одну картинку и умеют отдавать ответ только в виде текста (ну т.е. заточены под „нормальные“ капчи). Для того, чтобы они оказались бессильны достаточно просто сделать капчу (саму картинку) нераспознаваемой без сопутствующих инструкций. Например, привести единой картинкой 9 картинок из вашего примера (3x3) и ниже просто написать „ткните в слона“, т.е. по образу и подобию пролетавшего выше киевстара. Как бы не изголялся негодник спамер, сервис
а) не сможет принять и картинку и инструкцию (картинку со слонами и столами и текст „ткните в слона“)
б) даже если случится чудо и картинка пройдет, то сервис просто не сможет ее обработать — как передавать ответ, в каком формате и тд.
Еще стоит учесть, что боты, они ж в большинстве случаев относительно простые программы, их приоритет скорострельность, если конечно речь не идет о сервисе, который ну прям очень надо заспамить (тот же вебмастер яндекса), поэтому добавление простейших (но изменяющихся) проверок отработки javascript, например, будет достаточно для отсева большого количества автоматов и это поможет спасти небольшой блог от засилья роботов :) Или просто сделайте в .css файле вашего сайта запись в сессию какого либо значения, и по итогам получения сообщения проверьте наличие этого самого значения — думаю отсечете подавляющее большинство ботов (браузер нормального пользователя откроет файл стилей и соответственно значение некой переменной запишется в сессию, робот такой ерундой не будет заниматься, если конечно он заранее под это не заточен, тогда стиль загружен не будет, и на этапе получения сообщения вы будете точно знать, что его отправил пользователь (или бот заточенный под ваш ресурс) или же бот (+ возможно пользователь какого нить текстового браузера, не загружающего стили)
Ваш вариант действительно интересен и не надо слушать скептиков, предлагающих „искажать координаты“ :) Сделайте красивую реализацию и все будет отлично!
Мне иногда приходится писать различного рода ботов, некоторым из них приходится «распознавать капчи».
Всегда следует помнить, если очень надо пройти капчу на автомате, это все равно будет сделано. Поэтому надо для начала решить какой уровень защиты предоставляется. Моя статистика зоны ру показывает наличие более чем 50 000 блогов на Wordpress, если один из них придумает некую нестандартную защиту, никто конкретно для этого блога него не внесет и двух лишних символов в код программы-спамера, поэтому вполне сносно работают всякие бредозащиты типа «поставьте галочку „Я не робот“, как только такая защита становится популярной, естественно, этому будут обучены все роботы :)
Если что то в духе „Чтоб Wordpress комментами не забивали“ — хватит и простейших решений;
Если же речь идет о сервисе типа webmaster.yandex.ru — то никакая капча не спасет, ее будут обходить.
Вариантов обхода капчи естественно несколько, но всех их можно условно разбить на две группы:
1. OCR. т.е. „честное“ распознавание картинки программой.
2. Передача задачи распознавания какому-либо сервису. Адреса подобных сервисов знают все, кому они нужны :) На „том конце“ сервиса сидят реальные люди и под разными предлогами (будь то загрузка файла или заработок денег) руками распознают картинки.
Для того, чтобы 90% распознавателей из первой группы обломалось, достаточно, как ни странно, просто „слить“ некоторые буквы. Т.е. сделать так, чтобы небыло возможности автоматически разделить текст на отдельные буквы (когда символы разделены — все становится до неприличного просто). Сделать это можно хорошо и плохо. У recaptcha это сделано плохо (пользователь сам распознает с большим трудом) у webmaster.yandex.ru это сделано отлично (программе сложно ведь и ширина символов искажается, и четкой границы нет, а человеку довольно просто). Для того, чтобы отсечь остающиеся 10% упорных и „талантливых роботов“ нужно думать дальше, вариантов как всегда масса. Капчу Яндекса, насколько мне известно, не умеет распознавать ни один из „публичных“ ботов (т.е. тех, про которые пишут в сети, которых продают и покупают). Это отличная капча. Она проста для восприятия пользователем и довольно сложна для разбора программой.
А вот с сервисами, которых казалось бы обмануть очень сложно, бороться на деле проще: надо посмотреть как они работают. А практически все они работают по следующему принципу — пришли нам картинку, мы дадим тебе ID, зайди попозже, предъяви ID получишь распознанный текст. Все сервисы, которые знаю я, умеют принимать только одну картинку и умеют отдавать ответ только в виде текста (ну т.е. заточены под „нормальные“ капчи). Для того, чтобы они оказались бессильны достаточно просто сделать капчу (саму картинку) нераспознаваемой без сопутствующих инструкций. Например, привести единой картинкой 9 картинок из вашего примера (3x3) и ниже просто написать „ткните в слона“, т.е. по образу и подобию пролетавшего выше киевстара. Как бы не изголялся негодник спамер, сервис
а) не сможет принять и картинку и инструкцию (картинку со слонами и столами и текст „ткните в слона“)
б) даже если случится чудо и картинка пройдет, то сервис просто не сможет ее обработать — как передавать ответ, в каком формате и тд.
Еще стоит учесть, что боты, они ж в большинстве случаев относительно простые программы, их приоритет скорострельность, если конечно речь не идет о сервисе, который ну прям очень надо заспамить (тот же вебмастер яндекса), поэтому добавление простейших (но изменяющихся) проверок отработки javascript, например, будет достаточно для отсева большого количества автоматов и это поможет спасти небольшой блог от засилья роботов :) Или просто сделайте в .css файле вашего сайта запись в сессию какого либо значения, и по итогам получения сообщения проверьте наличие этого самого значения — думаю отсечете подавляющее большинство ботов (браузер нормального пользователя откроет файл стилей и соответственно значение некой переменной запишется в сессию, робот такой ерундой не будет заниматься, если конечно он заранее под это не заточен, тогда стиль загружен не будет, и на этапе получения сообщения вы будете точно знать, что его отправил пользователь (или бот заточенный под ваш ресурс) или же бот (+ возможно пользователь какого нить текстового браузера, не загружающего стили)
Ваш вариант действительно интересен и не надо слушать скептиков, предлагающих „искажать координаты“ :) Сделайте красивую реализацию и все будет отлично!