Скрипт для блокировки чата, чтобы разблокировать чат необходимо ввести символы с картинки (капчи), которая автоматически генерируется 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));
Код: Выделить всё
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;
Код: Выделить всё
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;
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), а на подбор уйдут годы.
Улучшения в генерации капчи:
- Отключение\включение 3х случайных картинок (ради красоты, интереса и сложности прибавит)
- Отключение\включение случайных смайлов в правом нижнем углу (ради красоты и сложности прибавит) (всего 10)
- Отключение\включение генераций линий на заднем плане
- Отключение\включение генераций случайных точек
- Отключение\включение генераций линий на переднем плане
- Теперь для каждого символа рандомно выбирается шрифт (всего 8, в папке fonts которые можно заменить по вкусу)
- Каждый символ рандомно сдвигается по вертикали
- Каждый символ рандомно наклоняется
- Файлы из папки ptokax кинуть в папку с устан0вленн0й патахой
- Файлы из папки web кинуть на вебсервер
- Обязательно измените переменные Salt в ChatGuard_captcha_api1.lua и md5Hash_img.php (достаточнео замены 1го символа)