Система CAPTCHA
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
$b=intval(rand(0,128));
$color = ImageColorAllocate($image, $r,$g,$b);
$shadow= ImageColorAllocate($image, $r+128, $g+128, $b+128);
$size=intval(rand(12,17));
$angle=intval(rand(-30,30));
$text=strtoupper(substr($private_key,$i,1));
ImageTTFText($image,$size,$angle,$x+2,26,$shadow,$this->font_file,$text);
ImageTTFText($image,$size,$angle,$x,24,$color,$this->font_file,$text);
$x+=$size+2;
}
if ($this->imagetype=="jpg")
imagejpeg($image, $this->get_filename(), 100);
else
imagepng($image, $this->get_filename());
ImageDestroy($image);
}
function display_captcha($noise=true) {
$this->make_captcha($noise);
$res="\n";
$alt=($this->lang=="en")?("Image"):("Зображення");
$res.="\n";
return $res;
}
}
?>
function display_captcha($noise=true) {
$this->make_captcha($noise);
$res="\n";
$alt=($this->lang=="fr")?("Vous devez recopier dans le champ ci-dessous les ".$this->long." caractиres parmis 0 а 9 et A а F"):("Vous must read and type the ".$this->long." chars within 0..9 and A..F");
$res.="\n";
return $res;
}
}
?>
Файл test.php
<?
require_once("./class_captcha.inc.php");
// Отримати параметри
if (isset($HTTP_POST_VARS[public_key]))
$public=$HTTP_POST_VARS[public_key];
if (isset($HTTP_POST_VARS[private_key]))
$private=$HTTP_POST_VARS[private_key];
$p=new ocr_captcha();
if (isset($HTTP_POST_VARS[private_key])) {
if ($p->check_captcha($public,$private))
echo "";
else
echo "";
}
\n";"> echo "\n";
echo $p->display_captcha(true);
echo "\n";
echo "\n";
$private=$p->generate_private();
echo "";
?>
Аналіз наведеного прикладу
У результаті роботи наведеного коду ми маємо систему CAPTCHA, що зображено на рисунках 9, 10 та 11.
Рис 9. Загальний вигляд системи CAPTCHA
Рис 10. Якщо перевірка пройшла вдало
Рис. 11. Якщо перевірка пройшла невдало
Уважний читач може сказати, що далеко не всі описані вище методи, що роблять важким розпізнавання, були застосовані. Проте, якщо слідувати всім рекомендаціям, то ми отримаємо дуже важкий для розпізнавання тест CAPTCHA не тільки для бота але й для людини. Тому у більшості випадків при розробці тесту кожний розробник програмного забезпечення хоче знайти золоту середину між легкістю у читанні зображення для користувача і важкістю розпізнавання для боту.
Іноді легкість розпізнавання для користувача має більший вплив на розробника програмного забезпечення ніж питання надійності - саме тому і зявляються CAPTCHA, які може зламати навіть малодосвідчений програміст.
У наведеній реалізації CAPTCHA гарним рішеннями було:
- різнокольоровий фон;
- різнокольоровий шрифт;
- відсутність чітких знакомісць;
- місцями символи можуть перекриватися;
- було застосовано перевороти для кожного символу окремо.
Недоліки наведеної реалізації CAPTCHA:
- один шрифт;
- відсутність маштабування символів;
- перекриття символів зустрічаються рідко.
Таким чином отримали дружню до користувача систему CAPTCHA з середнім рівнем захисту від ботів.
Висновки
CAPTCHA це дуже корисна та прогресивна технологія захисту від ботів. Але й досі не створено і мабуть не буде створено на 100 відсотків надійної CAPTCHA. Зламати будь яку існуючу систему це лише питання часу та грошей, і це ще раз підтверджує твердження “все, що збудовано людиною може бути нею і зламане”.
Хоча вже сьогодні чуються нові віяння у розробці CAPTCHA. На спеціалізованих сайтах вже можна побачити тестові трьохвимірні CAPTCHA. Але не треба бути пророком, щоб сказати як тільки вони стануть широко використовуватися, то знайдуться й ті які навчаться їх обходити.
Також можна зробити припущення, що основним ворогом CAPTCHA у найближчому майбутньому стане не хакерське мистецтво, а нейроні мережі та розробки у галузі штучного інтелекту.
Використані джерела
-
- Генетические алгоритмы, искусственные нейронные сети и проблемы виртуальной реальности / Г. К. Вороновский, К. В. Махотило. Х.: ОСНОВА,1997 112 с