Хак «Апгрейд капчи аля Яндекс»

Ввиду последних событий, а именно «СПАМ на LiveStreet» и «Бот регистрирует 120 юзеров в сутки», решил найти альтернативную капчу. Нашел случайно у себя в папке со скриптами какой-то калечный аналог капчи Яндекса, откуда скачал уже не помню, поэтому первоначального автора указать не могу. Считаю капчу Яндекса одной из самых лучших (и не только я), поэтому допилил этот скрипт и прикрутил к ЛС. Эта капча основана на kcaptcha, которая используется в стандартной комплектации движка, поэтому безопасность 100% не хуже и даже лучше — можно смело ставить, если нравится, конечно.

Скрин:
Апгрейд капчи аля Яндекс

Установка:

1) Скачиваем (отсюда или отсюда) и распаковываем архив.
Папку Zloy_Taburet кладем в \classes\lib\external\
Изображения zloy_taburet_arrow.gif и zloy_taburet_post.gif кладем в папку images вашего шаблона:
для шаблона new\templates\skin\new\images\
для шаблона developer\templates\skin\developer\images\

2) Находим в файле \templates\language\russian.php строчку:
'registration_captcha' => 'Введите цифры и буквы',
и меняем на:
'registration_captcha' => 'Введите цифры слева',
Тоже самое нужно сделать со всеми локализациями.

3) Вставляем капчу в шаблон:

Для шаблона NEW
3.1) Находим в файле \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>
и меняем на:

			<div class="zloy_taburet">
				<img class="taburet" src="{$DIR_WEB_ROOT}/classes/lib/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}" onclick="this.src='{$DIR_WEB_ROOT}/classes/lib/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}&n='+Math.random(); return false;" alt="" />
				<img class="captcha" src="{$DIR_STATIC_SKIN}/images/zloy_taburet_arrow.gif" alt="" />
				<div class="zloy_taburet_license">
					<label for="zloy_taburet_name">{$aLang.registration_captcha}:</label><br />
					<p><input type="text" class="input-text" style="width:80px;" name="zloy_taburet_name" value="" maxlength="6" /></p>
				</div>
				<div class="clear"></div>
			</div>

3.2) Находим в файле \templates\skin\new\css\style.css строчку:
.lite-center .input-note { display: block; color: #bbb; font-size: 11px; line-height: 14px; }
и после нее добавляем это:
.lite-center .zloy_taburet { background:url("../images/zloy_taburet_post.gif") no-repeat 0px 0px; }
.lite-center .zloy_taburet img.taburet { width:200px; height:60px; float:left; padding:7px 0 7px 5px; cursor:pointer; }
.lite-center .zloy_taburet img.captcha { float:left; margin:30px 8px 0 15px; }
.lite-center .zloy_taburet .zloy_taburet_license { float:left; margin-top:5px;}
.lite-center .zloy_taburet .clear { clear:both; padding-bottom:40px; }

Для шаблона DEVELOPER
3.3) Находим в файле \templates\skin\developer\actions\ActionRegistration\index.tpl:

		<p><label for="captcha">{$aLang.registration_captcha}:</label>
		<img src="{$DIR_WEB_ROOT}/classes/lib/external/kcaptcha/index.php?{$_sPhpSessionName}={$_sPhpSessionId}" /><br />
		<input type="text" name="captcha" id="captcha" maxlength="3" class="input-text captcha" value="" /></p>
и меняем на:

		<p>
			<div class="zloy_taburet">
				<img class="taburet" src="{$DIR_WEB_ROOT}/classes/lib/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}" onclick="this.src='{$DIR_WEB_ROOT}/classes/lib/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}&n='+Math.random(); return false;" alt="" />
				<img class="captcha" src="{$DIR_STATIC_SKIN}/images/zloy_taburet_arrow.gif" alt="" />
				<div class="zloy_taburet_license">
					<label for="zloy_taburet_name">{$aLang.registration_captcha}:</label>
					<p><input type="text" class="input-text" style="width:80px;" name="zloy_taburet_name" value="" maxlength="6" /></p>
				</div>
				<div class="clear"></div>
			</div>
		</p>

3.4) Находим в файле \templates\skin\developer\css\style.css строчку:
.center-block .error { color: #f20909; }
и после нее добавляем это:
.center-block .zloy_taburet { height:74px; background:url("../images/zloy_taburet_post.gif") no-repeat 0px 0px; }
.center-block .zloy_taburet img.taburet { width:200px; height:60px; float:left; padding:7px 0 7px 5px; cursor:pointer; }
.center-block .zloy_taburet img.captcha { float:left; margin:30px 8px 0 15px; }
.center-block .zloy_taburet .zloy_taburet_license { float:left; margin-top:4px;}
.center-block .zloy_taburet .clear { clear:both; }

4) Находим в файле \classes\actions\ActionRegistration.class.php строчку:
if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring']!=strtolower(getRequest('captcha'))) {
и меняем на:
if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring']!=strtolower(getRequest('zloy_taburet_name'))) {


Если вам не нужна старая капча, то удалите папку \classes\lib\external\kcaptcha\
Вроде бы все. Надеюсь ничего не забыл.


Товарищи, быть может у кого-то из вас есть лишние инвайты на хабр и лепру? Буду очень благодарен, если поделитесь. Заранее спасибо.

91 комментарий

avatar
Спасибо большое, респект, плюсую, уже прикручиваю.
avatar
Поставил эту капчу, работает прекрасно. Убрал хак «вопрос при регистрации» и убрал забаненные IP из админки, оставил только активацию по email и новую капчу спеуиально для проверки. Завтра отпишусь будет ли спам или нет. Спасибо за работу.
avatar
Великолепно. Принимаюсь за прикручивание к себе. Автору респектище!
avatar
Все установилось. Автор еще раз спасибо. Поклон ;)
avatar
Скажите, а если я прикрутил, но не видно что написано внутри, т.е. внутри пусто… что делать? помогите))
avatar
А стандартная капча отображается? Если да, то проверьте внимательно все ли пункты установки выполнены верно.
avatar
Здравствуйте! Подскажите пожалуйста а 4 пункт 4) Находим в файле \classes\actions\ActionRegistration.class.php строчку: это ТОЛЬКО для шаблона DEVELOPER или для NEW нужно тоже 4 пункт делать? Заранее спасибо.
avatar
Рано я обрадовался:( Эту капчу тоже пробивают собаки… опять с того же IP 82.193.96.212 зарегалось 2-е левых… Все та же бредятина в поле «о себе», левый маил и ссылка на сайт. Придется все таки через htaccess пока обороняться.
avatar
хех, только обрадовался новой капче, а получается она только с виду красивая, но все равно взламывается :(

но автору все равно! +1
avatar
Взломать можно что угодно, было бы умение, желание и смысл ломать. Такие дела =)
avatar
Раз такие пироги, то может avadim был прав? По-моему, обычный спам-бот не смог бы так быстро перестроится под новую капчу, ибо она значительно отличается от стандартной. Если это, конечно, не бот, которого целенаправленно травят на вас и переписывают его алгоритмы в режиме реального времени. В таком случае поможет только блокировка по IP. И то временно, пока бот не научится лазить через прокси. Тогда только инвайты спасут =)
avatar
если капчу берут слоем и выводят на порносайте для ввода. то как выглядет капча совершенно пофигу.
наберут её скорее всего школьнеги и наберут правильно. или расказать про заполнение форм на стороне?
avatar
Это реальный вариант, но он скорее будет использоваться для серьезных сайтов.
avatar
Такой метод мне известен, но не думаю, что в этом случае используется именно он. Carw прав — это скорее для серьезных проектов. Хотя… всякое может быть =)
avatar
Ничего не понимаю, ночью после того как 2-е левых зарегилось с новой капчей я вновь вбил в бан IP 82.193.96.212. До сих пор все спокойно. У кого еще с новой капчей были вторжения?
avatar
На самом деле отлично, что у вас такое есть, да еще и на пустом сайте. Можно найти хорошее решение. Если такая капча пробивается, то скорее всего копать надо вообще в другую сторону. Возможно ее можно обойти без заполнения?
avatar
Тоже посещала такая мысль, что либо спамят вручную (зачем?), либо тестируют нового бота для ЛС и дорабатывают его в режиме реального времени, либо был найден способ регистрации, не заполняя капчу.
avatar
если регают ботом/софтом следует подумать не о замене капчи а в первую очередь убрать везде слово «captcha».
Тоесть заменить его другим словом совсем не пахожим на капчу в шаблоне, в названии формы, в цсс… боту чтоб найти капчу нужно её как то распознать же =) а вы явно указываете «captcha» «тут» =)
avatar
а вы явно указываете «captcha» «тут» =)
скорее «я капча» =)
А вобще дело говорите, стоит заменить имена айди и классов.
avatar
угу и добавить двухступенчатую регистрацию =)
зарегал первую половину данных, получил мыло, прошел по ссылке, дорегистрировался + рекапча + доп вопрос (а лучше три и тес на айкью) =)
avatar
По-моему, в ГИТИС будет легче поступить, чем пройти такую регистрацию =)
Вечерком обновлю пост — изменю имена классов. Там только одно маленькое добавление будет — основной экшн регистрации нужно будет чуток подправить, чтобы капча заработала с новым именем.
avatar
ну что там поправить нужно я в старой капце поправил уже ;-)
но вобще нужно придумывать чтото простое и новое, тогда ещё на год полтора от спама уйдем.
и стопудняк это простое и новое как всегда лежит под носом.

PPS. я поддерживаю в раше один неизвестный движек… там реализация капчи идёт с фенечкой. если юзер переключился со страницы с капчей а потом вернулся чтоб её ввести то капча незасчитываеться (я имею ввиду переход — закрыл вкладку. открыл вкладку со страницей (сложил развернул окно)) только я честно хз как там это сделано. пол тыщи юзеров поставили цмску, про спам небыло пока нислова.
avatar
Если спама нет, то это еще не говорит о заслуге средств защиты. Может эти сайты просто нафиг никому не нужны :-)
avatar
Раз такие проблемы, может автору(ам) проекта подумать как решить эту задачу.
avatar
может вам подумать а автор сделает? или автор проекта вам обязан чемто?
тон неплохо смень бы дабы не обижать автора.
avatar
Так уже все последние топики только про это, вот я и написал.
какой еще тон, вы про что?!
avatar
Со спамом не только автор должен бороться — это долг каждого, кто пользуется LS =)
«Вставайте, люди русские» ©
В этой войне мы должны победить =)
avatar
что если сделать поля ввода информации, при регистрации пользователя предзаполненными?
то есть чтобы ввести какую-то информацию в строку, придется предварительно стереть уже написанное test, test@test.ru и тд
avatar
Хм. Может быть и поможет. Смотря как работает бот. Но попробовать никто не запрещает =) Имеет смысл делать предзаполненным только поле почты — если к test@test.ru бот добавит свой адрес, не очистив поле, то регулярка заругается, что введен неправильный формат мыла.
Мне проверять не на чем. Может быть yuri25 согласится потестировать на его сайте такой способ, раз уж так получилось, что его боты одолели =)
avatar
вобще спаминг движка это только показатель его популярности =) порадуйтесь за творение Орта же =)
avatar
Такими темпами LS скоро как DLE спамом обрастет с ног до головы =) Ура, товарищи! =)
avatar
как там в wp антиспам система называецо? может к ней можно както подключицо?
avatar
Не знаю, мало работал с этим убожеством =)
avatar
Все это хорошо, но в сети столько дешевых сервисов распознавания капч появилось, что есть смысл оставлять только активацию по почте :)
avatar
Отличный хак! Давно с небольшой завистью поглядывал на капчу яши, очень хотелось такую же :) Красиво, да и она очевидно сложнее для ботов. Добавил в избранное, обязательно поставлю.
Вы бы добавили этот хак в раздел модулей, а то топик может и затеряться со временем :)
avatar
Для WordPress появилась капча, в которой надо вращать картинки до правильного положения, посмотреть можно вот на этом блоге в комментах, а скачать плагин для WP кажется тут, если её доработать напильником, чтоб она работала на LS, то Xrumer её вроде не пробивает, возможно было бы счастье :) Сам к сожалению плохо хнаю php, чтоб такое реализовать, возможно кто-то заморочится, думаю, что эту капчу не намного проще было дорабатывать напильником.
avatar
Интересный вариант. Можно попробовать прикрутить.
avatar
Топик обновлён.
Изменнены имена классов, чтобы спам-ботам было трудней обнаружить капчу, и залит архив в раздел модулей (будет доступен после модерации).
avatar
А как насчёт вращающихся картинок? Нет желания заморочиться? :)
avatar
Возможно прикручу, как появится свободная минутка между учебой и работой. Если никто другой к тому времени не успеет прикрутить :)
avatar
Всё заменил по инструкции перестал работать.
пишет Ошибка: Неверный код

до смены названия работал (
avatar
А вы уверены, что не пропустили 4-ый пункт инструкции?
avatar
Спасибо. Действительно 4-ый пункт пропустил.
(он просто в конце)
avatar
Незачто. Всякое бывает :)
avatar
Была та же проблема. Уже собирался плакаться тут. Но почитал и оказалось я тоже забыл 4-ый пункт выполнить :-D

Спасибо вам, отличный хак!
avatar
Я обновил — полет нормальный. Наверное вы что-то пропустили =)
avatar
Прикрутил, всё работает отлично. Благодарствую.
avatar
На моем сайте на днях начали боты регистрироваться, правда не по 120 штук как тут кто-то писал)) Прикрутил этот хак и все прекратилось! Огромнейшее спасибо! ИМХО это самое полезное дополнение для LS за месяц (для меня точно), так как борьба со спамом это святое :)
avatar
Рад помочь =)
avatar
Тоже недавно такая же ситуация была — хак помог, спасибо :)
avatar
Спасибо за хак. Прикрутил, только у меня почему-то 2 формы для ввода цифр и они под картинкой с цифрами. Не подскажите почему так?
avatar
Наверное случайно вставили два раза код. Или не удалили старый.
Внимательно проверьте все пункты установки. Особенно обратите внимание на файл \templates\skin\ваш_шаблон\actions\ActionRegistration\index.tpl
avatar
Спасибо. Буду разбираться.
avatar
постоянно пишет что неверный код, в чем может быть проблема??
avatar
простите, не заметил коммента)
avatar
А у меня картинка не отображается. Скажите, для этой капчи надо обязательно GD2? У меня только GD установлен.
avatar
Для этой капчи, как и для стандартной, требуется GD2.
avatar
странно после того как поставил у меня названия меню изменились на "???
???????????? ???????
??????"

подскажите в чем проблема
ps смена шаблона не помогает :(
  • f1re
  • 0
avatar
проблему решил...(russian.php)
  • f1re
  • 0
avatar
Здравствуйте! Пытаюсь настроить, ливстрит под свои нужды, пока получалось с помощью чтения топиков на вашем сайте, но возник вопрос на который я не могу найти решения.
Мне нужно, чтоб при регистрации пользователь указал только имейл и ввел капчу, а ему на ящик прийдет сгенерированый пароль и ник сгенерированый по типу userid0036, чтоб юзеры не выдумывали пароли и логины.
avatar
Боты отсеиваться стали… но и многие пользователи жалуются что не могут разобрать картинку.
avatar
Други помогите. Поставил капчу. Всё ус тановилось. Только не показываются иферки и волны. Рамк и текст появилисб. А циферки и волны внутри рамки нет. только белое поле.
avatar
Други помогите. Поставил капчу. Всё ус тановилось. Только не показываются иферки и волны. Рамк и текст появилисб. А циферки и волны внутри рамки нет. только белое поле. Это если в Мазиле смотреть.
А в експлорере — просто не отображается картинка.
Хотя две картинки в каталоги разместил.
avatar
Аналогичная ситуация. Что делать?
avatar
спам только неоправданный, ссылки скрываются под и rel=nohref забавный народ индейцы, как-будто из профилей прям так и попрет народ…
avatar
* noindex (тег не запостился) и rel=«nofollow»
avatar
Можно как то сделать изображение капчи почетче? Иногда сам не могу разобрать. Подскажите плиз кто знает. Спасибо.
avatar
файл index.php в папке со скриптом каптчи
Строка 8
$jpeg_quality = 90;

Меняем значение 90 (от 1 до 100 вроде)
avatar
от этого уменьшится сжатие жпег. 90% это нормальная цифра. надо ковырять параметры искажения, там куча разных цифр, формул и параметров в коде при генерации картинки, можно подбирать их методом тыка, что бы изображение получилось более или менее разглядываемое
avatar
И чтобы боты были более менее разборчивы :)
avatar
Эта каптча работает на версии php 5.3.1?
avatar
У меня на 5.3.1 работает, ничего не менял.
avatar
все круто, только в файле index.tpl из actionregistration надо убрать лишнее

avatar
Ребят, помогите. Все сделал как тут описано, но сама картинка не отображается. В чем проблема?
Вот, посмотрите сами: ls.macdays.ru/registration/
avatar
'res/watermark.png' is not a valid PNG file

Ватермарк у Вас кривой судя по всему… попробуйте другой…
avatar
автор, ещё один человек тебе благодарен ;)
  • F_5
  • 0
avatar
Спасибо!!!
avatar
Почему-то у меня постоянно неверный код при регистрации(

Как исправить?
avatar
спасибо!
avatar
я еще добавил для input где вводятся цифры параметр autocomplete=«off»
чтобы подсказка браузера не вылазила
avatar
спасибо большое на 0.4 пихнул пошла)))
avatar
Для версии 0.4 и выше есть несколько особенностей. Вот по пунктам соответственно:
1) Копировать папку по адресу: engine/lib/external/
3.1) Находим в файле /templates/skin/new/actions/ActionRegistration/index.tpl:
{$aLang.registration_captcha}:<br />
			<img src="{cfg name='path.root.engine_lib'}/external/kcaptcha/index.php?{$_sPhpSessionName}={$_sPhpSessionId}"  onclick="this.src='{cfg name='path.root.engine_lib'}/external/kcaptcha/index.php?{$_sPhpSessionName}={$_sPhpSessionId}&n='+Math.random();">
			<p><input type="text" class="input-text" style="width: 80px;" name="captcha" value="" maxlength=3 /></p>

и меняем на:
<div class="zloy_taburet">
             <img class="taburet" src="{cfg name='path.root.engine_lib'}/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}" onclick="this.src='{cfg name='path.root.engine_lib'}/classes/lib/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}&n='+Math.random(); return false;" alt="" />
                                <img class="captcha" src="{cfg name='path.static.skin'}/images/zloy_taburet_arrow.gif" alt="" />
                                <div class="zloy_taburet_license">
                                        <label for="zloy_taburet_name">{$aLang.registration_captcha}:</label><br />
                                        <p><input type="text" class="input-text" style="width:80px;" name="zloy_taburet_name" value="" maxlength="6" /></p>
                                </div>
                                <div class="clear"></div>
                        </div>

Должно работать:) Автору респект!
avatar
Добрый день!

Сделал как написали (версия 0.4.1 шаблон NEW) не могу зарегистрироваться: постоянно выдаёт ошибку «неверный код регистрации»…

В какую сторону копать?
avatar
Если быть точным, менять на:

<div class="zloy_taburet">
  <img class="taburet" src="{cfg name='path.root.engine_lib'}/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}" onclick="this.src='{cfg name='path.root.engine_lib'}/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}&n='+Math.random(); return false;" alt="" />
  <img class="captcha" src="{cfg name='path.static.skin'}/images/zloy_taburet_arrow.gif" alt="" />
  <div class="zloy_taburet_license">
       <label for="zloy_taburet_name">{$aLang.registration_captcha}:</label><br />
       <p><input type="text" class="input-text" style="width:80px;" name="zloy_taburet_name" value="" maxlength="6" /></p>
  </div>
  <div class="clear"></div>
</div>
avatar
Странно, мучался, конфижил, правил скрипт, а плагин принципиально выдавал «неправильный ключ», даже перезакатывал поверху все заново… Потом махнул рукой, снес его под чистую, почистил кэш, поставил заново — все работает, вроде как так и задумывалось… Снова подправил все моменты, которые меня интересовали — по-прежднему работает… Странно… ))

Одно смутило — нельзя юзать буквы в капче, тупо бело выводится, но, думаю, что это и сам доковыряю…
Спасибо за плагин!
avatar
Сделал, как описано, на Версию 0.4.2 не пошла, тупо стрелка и все
avatar
Эта каптча есть вот здесь => livestreetcms.com/addons/view/87/
avatar
на 5.0.1 пойдёт?
avatar
Я ставил на 0.5 — работает, там только где то css немного надо подправить иначе форма регистрации растягивается на всю ширину экрана, наверное и на 0.5.1 будет работать.
avatar
Я минут 30 назад ставил на 0.5.1 она то работает, но при нажатии на картинку каптчи (чтобы обновить) она пропадает и больше ничего не появляется… только после обновлении страницы браузера...=(
avatar
Ни у кого случайно плагин не остался?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.