1. Введение. почитав топик о тюнинге Капчи и решил попробовать прикрутить рекапчу. reCAPTCHA — это система для защиты веб-сайта от интернет ботов (для защиты от спама), которая с пользой использует затраченные на ввод изображения время человека, с целью распознавания книг. Полученное мной решение не идеальное, имеет некоторые недоработки, но, что удивительно (смайл), работает. Буду рад, если хоть кто нибудь подскажет и поможет доработать до оптимального состояния.
2. Установка 2.1 Подготовка
Первым делом, нужно зарегистрироваться на официальном сайте для получения API ключей, а также скачать библиотеку для работы с рекапчей. Библиотеку лично я положил в classes/lib/external/recaptcha/recaptchalib.php 2.2 Добавление reCAPTCHA
правим файл templates/skin/new/actions/ActionRegistration/index.tpl
находим в нем
где ВАШ_PUBLIC_KEY — ваш публичный ключ, полученный на recaptcha.net
идем в файл classes/actions/ActionRegistration.class.php
находим
if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring']!=strtolower(getRequest('captcha'))) {
$this->Message_AddError($this->Lang_Get('registration_captcha_error'),$this->Lang_Get('error'));
$bError=true;
}
меняем на
$resp = null;
if ($_POST["recaptcha_response_field"]){
$resp = recaptcha_check_answer (ВАШ_PRIVATE_KEY,$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]);}
if ($resp==null or !$resp->is_valid){
$this->Message_AddError($this->Lang_Get('registration_captcha_error'),$this->Lang_Get('error'));
$bError=true;
}
где ВАШ_PRIVATE_KEY — ваш приватный ключ, полученный на recaptcha.net
в начало файла вставить
Проверяем 3. Недоработки и проблемы 3.1 Капча
У данной капчи есть свои недостатки. Если сервер рекапчи упадет, зарегистрироваться пользователи несмогут. 3.2 Код
Почему то в темплейте не подхватывается константа из config.php RECAPTCHA_PUBLIC_KEY. скажем
код
кстати я тут подумал, что капча с суммой цифр не такая уж и хорошая идея. компьютер считает в любом случае лучше( и намнооооого быстрее) человека. а у меня есть знакомые, которые 34+57 могут выщитывать около минуты. Для них это будет жесть.
Я одинадцать лет назад писал курсовую по неправомерному доступу информации, с тех пор крепко засело в голове. Можно на пальцах доказать, почему это не игра в слова и чем важна разница, но это уж точно будет занудство. Одиннадцать лет!!1 я и диод… ну, ты понел ;-)
блин, это круто конечно, но вот я например как и 99% человека вокруг курсовой на эту тему не писали и поэтому выражение взломать что-угодно применяют во всех смыслах какие только можно придумать, и что самое дурацкое — понимают друг-друга.
я тоже за чистоту языка и правильность понятий, но лучше просто выдать определение, чем играть в слова,
Краткое определение — выше. Поскольку условием для получения доступа является распознавание картинки, то регистрация ботов на сайте — это санкционированный доступ к информации. Попрошу не очернять словом «флуд» академическую дискуссию
Противоречиво как то всё получается.
Условием получения доступа, вообще-то, является то, что регистрирующийся — человек. Капча, это проверка на человечность. Если её проходит робот, значит проверка не работает -> сломана, взломана
Для вас такие выкладки выглядят противоречиво потому, что вы смешиваете цели и задачи капчи.
Нет и в обозримом будущем не будет ни единого стопроцентно работающего способа удостовериться, что форму отправляет человек, а не робот. Откройте код и посмотрите — никакой проверки на человечность там нет, есть проверка на соответствие символов на картинке символам, введённым в форме. Это и есть условие для получения доступа.
ну ведь «проверка на соответствие символов» это вариант «проверки на человечность» и вообще таких проверок можно придумать хоть тысячу штук проблема только в том, что если взломщик (вот как его назвать?) решится составить алгоритм для обхода именно этой проверки — он его составит…
То, что минусуют — это нормально. Здесь же не профессиональное сообщество. На каком-нибудь нуллед.вс, я думаю, обывательская реакция могла быть более резкой. Школоло не спит!
Цели вы правиьно обозначили, а задача капчи — распознавание символов на картинке. Поскольку бот успешно распознаёт капчу, задача решается корректно. Никакого взлома. Точно также, как и войти в незапертую дверь, просто повернув ручку-защёлку и открыв её.
Точно также, как и войти в незапертую дверь, просто повернув ручку-защёлку и открыв её.
тут вы неправы. капча в данном случае — это и есть замок, который можно либо открыть ключем, либо подобать ключ по профилю пути замочной скважины, что и делает робот.
Это частности, настоящий замок обеспечивает достаточную защиту и отмычки к нему не предлагаются на каждом углу, в отличие от ocr-софта и инвайтов на антикапчу.
Если от образности обратиться в правовое русло, то существует судебная практика, которая не признаёт техническим средством защиты алгоритм, для обхода которого существуют широко доступные средства. Пример — процессы, связанные с программой deCSS.
Я говорил о том, что говорить о взломе капчи некорректно. Что касается сервиса «рекапча», то способы надёжного его обхода существуют, один из них я упомянул выше. Этот сервис не сможет остановить всех ботов, но значительную из часть, возможно, остановит.
Если вы привыкли пользоваться обывательскими терминами — почему бы и нет? Я не настаиваю и никого не хочу ни в чём убедить, называйте как хотите. Кому-то выражения «ордер на обыск», «завели дело» и т. п. режут слух, а кто-то их считает нормой.
В этой области полно широко распространённых заблуждений, и это нормально. Вы правильно отметили, что 99% людей не сталкивались с этим на практике, а потому говорят, как привыкли, как говорят все вокруг. Отчасти, это вина малограмотных журналистов, которые такие вещи внедряют в массовое сознание.
Вводил. Белый экран всё равно. Может мне кто выслать свой файл ActionRegistration.class.php, а я там ключ свой вставлю просто. Напишите в ЛС, кто может.
Ведь если я допустим через хром или оперу, ну или программным способом вырежу часть получение капчи, то у нас и не будет существовать recaptcha_response_field, а значит и проверки нет
reCAPTCHA — это адский ад любого пользователя, особенно радостно встретиться с ней тем, кто не владеет иностранными языками. Терпеть ее не могу, хоть и знаю английский. Особенно бесит, когда предлагает вводить всякие длинные штуки с символами. Бывает, раз десять приходится жать на обновить, чтобы вылезло что-нибудь покороче и попроще.
По вашему у меня не заработало! Постоянно пропускало даже с неправильной каптчей или вовсе без неё!
Делайте правильно!
$resp = null;
if (array_key_exists('recaptcha_challenge_field',$_POST)){
$resp = recaptcha_check_answer ('АЙДИКАПТЧИ',$_SERVER[«REMOTE_ADDR»],getRequest(«recaptcha_challenge_field»),getRequest(«recaptcha_response_field»));}
if ($resp==null or !$resp->is_valid){
$this->Message_AddError(«Неверно введена каптча»,$this->Lang_Get('error'));
$bError=true; return false;
$resp = null;
if (array_key_exists('recaptcha_challenge_field',$_POST)){
$resp = recaptcha_check_answer ('ключАЙДИКАПТЧИ',$_SERVER["REMOTE_ADDR"],getRequest("recaptcha_challenge_field"),getRequest("recaptcha_response_field"));}
if ($resp==null or !$resp->is_valid){
$this->Message_AddError("Неверно введена каптча",$this->Lang_Get('error'));
$bError=true;return false;
}
44 комментария
Зачем изобретать ище один велосипед?
Можно сделать каптчу как сумму 3 цифр, а цифры брать от 1 до 5 например!
Вариантов много!
у кого-то в проекте были случаи взлома каптчи?
я тоже за чистоту языка и правильность понятий, но лучше просто выдать определение, чем играть в слова,
хотя весь этот флуд доставляет
Условием получения доступа, вообще-то, является то, что регистрирующийся — человек. Капча, это проверка на человечность. Если её проходит робот, значит проверка не работает -> сломана, взломана
Нет и в обозримом будущем не будет ни единого стопроцентно работающего способа удостовериться, что форму отправляет человек, а не робот. Откройте код и посмотрите — никакой проверки на человечность там нет, есть проверка на соответствие символов на картинке символам, введённым в форме. Это и есть условие для получения доступа.
ладно.
нас уже минусовать начали.тут вы неправы. капча в данном случае — это и есть замок, который можно либо открыть ключем, либо подобать ключ по профилю пути замочной скважины, что и делает робот.
Если от образности обратиться в правовое русло, то существует судебная практика, которая не признаёт техническим средством защиты алгоритм, для обхода которого существуют широко доступные средства. Пример — процессы, связанные с программой deCSS.
В этой области полно широко распространённых заблуждений, и это нормально. Вы правильно отметили, что 99% людей не сталкивались с этим на практике, а потому говорят, как привыкли, как говорят все вокруг. Отчасти, это вина малограмотных журналистов, которые такие вещи внедряют в массовое сознание.
надо ведь в classes/actions/ActionRegistration.class.php вставлять?
А этот код
вставлять в templates/skin/new/actions/ActionRegistration/index.tpl?
тут капча работает нормально. только что сделал сам.
кстати, совсем проглядел
так вставлять не надо. правильней будет
не знаю почему, но нихочет яваскрипт подхватывать константу {$RECAPTCHA_PUBLIC_KEY}
да и еще, ActionRegistration начинаться должен так
пробуйте :)
Всё сделал как было написано выше и нашёл ошибку
в classes/actions/ActionRegistration.class.php
А должно быть так:
Кто не заметил, то я вписал privat_key в одинарные скобки
Теперь у меня рекаптча нормально работает. Проверял в Firefox и IE
Ведь если я допустим через хром или оперу, ну или программным способом вырежу часть получение капчи, то у нас и не будет существовать recaptcha_response_field, а значит и проверки нет
Делайте правильно!
$resp = null;
if (array_key_exists('recaptcha_challenge_field',$_POST)){
$resp = recaptcha_check_answer ('АЙДИКАПТЧИ',$_SERVER[«REMOTE_ADDR»],getRequest(«recaptcha_challenge_field»),getRequest(«recaptcha_response_field»));}
if ($resp==null or !$resp->is_valid){
$this->Message_AddError(«Неверно введена каптча»,$this->Lang_Get('error'));
$bError=true; return false;
}