ChatGuard + Capcha (0.9) (API1, API2)

Только готовые скрипты с описанием.
Ответить
Аватара пользователя
ASPIRIN++
Сообщения: 69
Зарегистрирован: 24 авг 2009, 01:02

ChatGuard + Capcha (0.9) (API1, API2)

Сообщение ASPIRIN++ »

О скрипте:
Скрипт для блокировки чата, чтобы разблокировать чат необходимо ввести символы с картинки (капчи), которая автоматически генерируется php скриптом на веб сервере. Основа для скрипта lua взята из ChatGuard (так как велосипед изобретать не хочется).

Как это работает?
С помощью библиотеки md5 для PtokaX, есть возможность генерировать необратимые md5 хэши. Этим я и воспользовался, генерируется "пароль" из 3х случайных символов символов:

Код: Выделить всё

local pass = string.char(math.random (1, 255))..string.char(math.random (1, 255))..string.char(math.random (1, 255));
Далее получаем его md5 хэш по принципу md5(md5(pass)+salt), т.е. получаем хэш пароля, прибавляем к нему соль (salt), и получаем хэш всего этого, после берём 4 символы из серединки:

Код: Выделить всё

local hash1 = md5.sumhexa(md5.sumhexa(pass)..Salt);	
if string.len(hash1) ~= 4 then hash1 = string.sub(hash1, string.len(hash1)/2-3, string.len(hash1)/2); end;
Полученный результат (hash1) прогоняем ещё раз по такому же принципу и результат записываем в hash2:

Код: Выделить всё

local hash2 = md5.sumhexa(md5.sumhexa(hash1)..Salt);
if string.len(hash2) ~= 4 then hash2 = string.sub(hash2, string.len(hash2)/2-3, string.len(hash2)/2); end;
Теперь у нас 2 необратимых хэша. Первый (hash1) - хэш пароля, а второй (hash2) - хэш хэша пароля.
hash1 мы передаём php скрипту на веб сервере в строке с параметром h, а hash2 мы оставим у себя для проверки.

Скрипт генерирует из переданного ему хэша, хэш по нашему принципу и мы получаем опять же хэш хэша пароля, т.е. тоже самое что и hash2 в нашем скрипте, только на php:

Код: Выделить всё

$Hash = md5(md5($Pass).$Salt);
if (strlen($Hash) != 4) {$Hash = substr($Hash,strlen($Hash)/2-4,4);}
После этого скрипт генерирует картинку (капчу), со сгенерированным хэшем, а пользователь вводить его с картинки в чат:
Изображение

Если пользователь ввёл правельные 4 символы то блокировка снимается, иначе вопрос повторяется:
Изображение

Плюс всей системы в том что боты не смогут просканировать текст и получить число или слово для разблокировки, а получить символы с картинки с шумами не очень то и просто, да и некто не будет так изощрятся ради флуда.
Хэши необратимые а значит получить исходный текст нельзя, хэшировать повторно для получаения hash2 тоже нельзя незная соль (salt), а на подбор уйдут годы. *CRAZY*

Улучшения в генерации капчи:
  1. Отключение\включение 3х случайных картинок (ради красоты, интереса и сложности прибавит)
  2. Отключение\включение случайных смайлов в правом нижнем углу (ради красоты и сложности прибавит) (всего 10)
  3. Отключение\включение генераций линий на заднем плане
  4. Отключение\включение генераций случайных точек
  5. Отключение\включение генераций линий на переднем плане
  6. Теперь для каждого символа рандомно выбирается шрифт (всего 8, в папке fonts которые можно заменить по вкусу)
  7. Каждый символ рандомно сдвигается по вертикали
  8. Каждый символ рандомно наклоняется
Установка:
  1. Файлы из папки ptokax кинуть в папку с устан0вленн0й патахой
  2. Файлы из папки web кинуть на вебсервер
  3. Обязательно измените переменные Salt в ChatGuard_captcha_api1.lua и md5Hash_img.php (достаточнео замены 1го символа)
Скачать: *CRAZY*
API2.rar
Версия 0.9 для API2
(234.85 КБ) 792 скачивания
API1.rar
Версия 0.9 для API1
(235.7 КБ) 715 скачиваний
Последний раз редактировалось ASPIRIN++ 31 авг 2009, 05:03, всего редактировалось 3 раза.
Аватара пользователя
ASPIRIN++
Сообщения: 69
Зарегистрирован: 24 авг 2009, 01:02

Сообщение ASPIRIN++ »

кстати тест самого скрипта пока поработает на [url]dchub://89.178.56.206[/url], так что если интересно на него поглазеть заходите :-)
Последний раз редактировалось ASPIRIN++ 31 авг 2009, 05:01, всего редактировалось 1 раз.
Аватара пользователя
Sunlight
Сообщения: 30
Зарегистрирован: 24 авг 2009, 01:47
Хаб: dchub://hub.pushkindc.ru
Контактная информация:

Сообщение Sunlight »

Хороший скрипт, если несложно, переведи на луа1 :-[
Там за основу взят скрипт ChatGuard, я так понял, который под луа1 есть.
Аватара пользователя
ASPIRIN++
Сообщения: 69
Зарегистрирован: 24 авг 2009, 01:02

Сообщение ASPIRIN++ »

Sunlight писал(а):если несложно, переведи на луа1
запросто)) только просплюсь 2е суток без сна %-)
Аватара пользователя
ASPIRIN++
Сообщения: 69
Зарегистрирован: 24 авг 2009, 01:02

Сообщение ASPIRIN++ »

всё всю ночь просидел ))) в результате весрия 0.9 под api1 и api2 *CRAZY* %-)
Аватара пользователя
Sunlight
Сообщения: 30
Зарегистрирован: 24 авг 2009, 01:47
Хаб: dchub://hub.pushkindc.ru
Контактная информация:

Сообщение Sunlight »

Респект, все работает =)
Исправил пару опечаток только и переделал под себя.
Аватара пользователя
Sunlight
Сообщения: 30
Зарегистрирован: 24 авг 2009, 01:47
Хаб: dchub://hub.pushkindc.ru
Контактная информация:

Сообщение Sunlight »

Что нужно подправить чтобы не учитывался регистр букв? Ато на капче большие буквы, а вводить в чат нужно обязательно маленькими. Путаются люди.
Аватара пользователя
Sunlight
Сообщения: 30
Зарегистрирован: 24 авг 2009, 01:47
Хаб: dchub://hub.pushkindc.ru
Контактная информация:

Сообщение Sunlight »

Связался с автором, помог решить проблему:
Под апи1:
if US[sUser.sName].hash==arg then изменить на if string.lower(US[sUser.sName].hash)==string.lower(arg) then
if sData==US[sUser.sName].hash then изменить на if string.lower(sData)==string.lower(US[sUser.sName].hash) then
Аватара пользователя
Prapor
Сообщения: 249
Зарегистрирован: 24 авг 2009, 08:40
Хаб: dchub://prapor.in
Откуда: Москва
Контактная информация:

Сообщение Prapor »

Для api2:

Код: Выделить всё

if US[sUser.sNick].hash==arg then
изменить на

Код: Выделить всё

if string.lower(US[sUser.sNick].hash)==string.lower(arg) then
и

Код: Выделить всё

if sData==US[sUser.sNick].hash then
изменить на

Код: Выделить всё

if string.lower(sData)==string.lower(US[sUser.sNick].hash) then
Последний раз редактировалось Prapor 03 окт 2009, 17:44, всего редактировалось 1 раз.
Neolo

Verlihub

Сообщение Neolo »

=-O А что-нить похожее под Verlihub есть??
XM

Сообщение XM »

товарищи, переведите это в луа для верлика, пожалуйста... вам столько народа спасибо скажет =)
Ответить