тюнинг капчи (reCAPTCHA)
14
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
находим
меняем на
где ВАШ_PRIVATE_KEY — ваш приватный ключ, полученный на recaptcha.net
в начало файла вставить
Проверяем
3. Недоработки и проблемы
3.1 Капча
У данной капчи есть свои недостатки. Если сервер рекапчи упадет, зарегистрироваться пользователи несмогут.
3.2 Код
Почему то в темплейте не подхватывается константа из config.php RECAPTCHA_PUBLIC_KEY. скажем
код
у меня не работает. Кто подскажет как исправить, то буду рад.
и решил попробовать прикрутить . reCAPTCHA — это система для защиты веб-сайта от интернет ботов (для защиты от спама), которая с пользой использует затраченные на ввод изображения время человека, с целью распознавания книг. Полученное мной решение не идеальное, имеет некоторые недоработки, но, что удивительно (смайл), работает. Буду рад, если хоть кто нибудь подскажет и поможет доработать до оптимального состояния.
2. Установка
2.1 Подготовка
Первым делом, нужно на официальном сайте для получения API ключей, а также для работы с рекапчей. Библиотеку лично я положил в classes/lib/external/recaptcha/recaptchalib.php
2.2 Добавление reCAPTCHA
правим файл templates/skin/new/actions/ActionRegistration/index.tpl
находим в нем
{$aLang.registration_captcha}:<br />
<img src="{$DIR_WEB_ROOT}/classes/lib/external/kcaptcha/index.php?{$_sPhpSessionName}={$_sPhpSessionId}">
<p><input type="text" class="input-text" style="width: 80px;" name="captcha" value="" maxlength=3 /></p>заменяем это на
{$aLang.registration_captcha}:<br />
<script type="text/javascript"
src="http://api.recaptcha.net/challenge?k=ВАШ_PUBLIC_KEY">
</script>где ВАШ_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
в начало файла вставить
require_once (DIR_SERVER_ROOT."/classes/lib/external/recaptcha/recaptchalib.php");
Проверяем
3. Недоработки и проблемы
3.1 Капча
У данной капчи есть свои недостатки. Если сервер рекапчи упадет, зарегистрироваться пользователи несмогут.
3.2 Код
Почему то в темплейте не подхватывается константа из config.php RECAPTCHA_PUBLIC_KEY. скажем
код
{$aLang.registration_captcha}:<br />
<script type="text/javascript"
src="http://api.recaptcha.net/challenge?k={$RECAPTCHA_PUBLIC_KEY}">у меня не работает. Кто подскажет как исправить, то буду рад.
- +4
- 05 мая 2009, 20:54
- randomtoy
Народ, а разве не проще сделать каптчу в виде сумы цифр или ответа на банальный вопрос?
Зачем изобретать ище один велосипед?
Зачем изобретать ище один велосипед?
кстати я тут подумал, что капча с суммой цифр не такая уж и хорошая идея. компьютер считает в любом случае лучше( и намнооооого быстрее) человека. а у меня есть знакомые, которые 34+57 могут выщитывать около минуты. Для них это будет жесть.
на мой взгляд, текущая каптча визуально проще для ввода, нежели recaptcha
у кого-то в проекте были случаи взлома каптчи?
у кого-то в проекте были случаи взлома каптчи?
блин, это круто конечно, но вот я например как и 99% человека вокруг курсовой на эту тему не писали и поэтому выражение взломать что-угодно применяют во всех смыслах какие только можно придумать, и что самое дурацкое — понимают друг-друга.
я тоже за чистоту языка и правильность понятий, но лучше просто выдать определение, чем играть в слова,
хотя весь этот флуд доставляет
я тоже за чистоту языка и правильность понятий, но лучше просто выдать определение, чем играть в слова,
хотя весь этот флуд доставляет
Для вас такие выкладки выглядят противоречиво потому, что вы смешиваете цели и задачи капчи.
Нет и в обозримом будущем не будет ни единого стопроцентно работающего способа удостовериться, что форму отправляет человек, а не робот. Откройте код и посмотрите — никакой проверки на человечность там нет, есть проверка на соответствие символов на картинке символам, введённым в форме. Это и есть условие для получения доступа.
Нет и в обозримом будущем не будет ни единого стопроцентно работающего способа удостовериться, что форму отправляет человек, а не робот. Откройте код и посмотрите — никакой проверки на человечность там нет, есть проверка на соответствие символов на картинке символам, введённым в форме. Это и есть условие для получения доступа.
ну ведь «проверка на соответствие символов» это вариант «проверки на человечность» и вообще таких проверок можно придумать хоть тысячу штук проблема только в том, что если взломщик (вот как его назвать?) решится составить алгоритм для обхода именно этой проверки — он его составит…
ладно.нас уже минусовать начали.
ладно.
Цель капчи определить бот или человек проходит регистрацию. Если бот успешно проходит проверку капчей, то это и явлеяется ее взломом. ИМХО!
Это частности, настоящий замок обеспечивает достаточную защиту и отмычки к нему не предлагаются на каждом углу, в отличие от ocr-софта и инвайтов на антикапчу.
Если от образности обратиться в правовое русло, то существует судебная практика, которая не признаёт техническим средством защиты алгоритм, для обхода которого существуют широко доступные средства. Пример — процессы, связанные с программой deCSS.
Если от образности обратиться в правовое русло, то существует судебная практика, которая не признаёт техническим средством защиты алгоритм, для обхода которого существуют широко доступные средства. Пример — процессы, связанные с программой deCSS.
Если вы привыкли пользоваться обывательскими терминами — почему бы и нет? Я не настаиваю и никого не хочу ни в чём убедить, называйте как хотите. Кому-то выражения «ордер на обыск», «завели дело» и т. п. режут слух, а кто-то их считает нормой.
В этой области полно широко распространённых заблуждений, и это нормально. Вы правильно отметили, что 99% людей не сталкивались с этим на практике, а потому говорят, как привыкли, как говорят все вокруг. Отчасти, это вина малограмотных журналистов, которые такие вещи внедряют в массовое сознание.
В этой области полно широко распространённых заблуждений, и это нормально. Вы правильно отметили, что 99% людей не сталкивались с этим на практике, а потому говорят, как привыкли, как говорят все вокруг. Отчасти, это вина малограмотных журналистов, которые такие вещи внедряют в массовое сознание.
Проделал всё по инструкции, но появляется белый экран на странице регистрации.
А этот код
вставлять в templates/skin/new/actions/ActionRegistration/index.tpl?
require_once (DIR_SERVER_ROOT."/classes/lib/external/recaptcha/recaptchalib.php"); надо ведь в classes/actions/ActionRegistration.class.php вставлять?А этот код
{$aLang.registration_captcha}:<br />
<script type="text/javascript"
src="http://api.recaptcha.net/challenge?k={$RECAPTCHA_PUBLIC_KEY}">вставлять в templates/skin/new/actions/ActionRegistration/index.tpl?
Вводил. Белый экран всё равно. Может мне кто выслать свой файл ActionRegistration.class.php, а я там ключ свой вставлю просто. Напишите в ЛС, кто может.
тут капча работает нормально. только что сделал сам.
кстати, совсем проглядел
{$aLang.registration_captcha}:<br />
<script type="text/javascript"
src="http://api.recaptcha.net/challenge?k={$RECAPTCHA_PUBLIC_KEY}">так вставлять не надо. правильней будет
{$aLang.registration_captcha}:<br />
<script type="text/javascript"
src="http://api.recaptcha.net/challenge?k=6LdTNgYAAAAAAPqgixUorBM-RVdN073VZbZn1kES">
</script>не знаю почему, но нихочет яваскрипт подхватывать константу {$RECAPTCHA_PUBLIC_KEY}
да и еще, ActionRegistration начинаться должен так
<?php
require_once (DIR_SERVER_ROOT."/classes/lib/external/recaptcha/recaptchalib.php");
/*-------------------------------------------------------
*
* LiveStreet Engine Social Networking
* Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
* Official site: www.livestreet.ru
* Contact e-mail: rus.engine@gmail.com
*
* GNU General Public License, version 2:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/
пробуйте :)
Щас пол часа парился у самого был белый экран всё дело в пропущеных ковычках.
Всё сделал как было написано выше и нашёл ошибку
в classes/actions/ActionRegistration.class.php
А должно быть так:
Кто не заметил, то я вписал privat_key в одинарные скобки
Теперь у меня рекаптча нормально работает. Проверял в Firefox и IE
Всё сделал как было написано выше и нашёл ошибку
в classes/actions/ActionRegistration.class.php
$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;
}А должно быть так:
$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;
}Кто не заметил, то я вписал privat_key в одинарные скобки
'ВАШ_PRIVATE_KEY'Теперь у меня рекаптча нормально работает. Проверял в Firefox и IE
reCAPTCHA — это адский ад любого пользователя, особенно радостно встретиться с ней тем, кто не владеет иностранными языками. Терпеть ее не могу, хоть и знаю английский. Особенно бесит, когда предлагает вводить всякие длинные штуки с символами. Бывает, раз десять приходится жать на обновить, чтобы вылезло что-нибудь покороче и попроще.
Комментарии (41)
RSS свернуть / развернуть