Той хто працював з CMS SocialEngine-3, мабуть, стикався з масовою реєстрацією ботів на сайті. Боти шкідливі тим, що залишають купу рекламного непотребу в блогах та подіях. На видалення цього непотребу та самих спамботів може йти доволі багато часу. Такий стан справ зумовлено тим, що стандартна капча (код безпеки) досить легко розпізнається і не захищає від автореєстрації.
Як цьому зарадити? Найпростіше рішення — ускладнити стандартну капчу. Знайшов вирішення цієї проблеми і охоче ділюся ним з вами.
Правити будемо файл: /public_html/images/secure.php — саме він формує код безпеки. Отже, відкриваємо файл редактором і замінюємо весь його вміст на наступний код:
—————————————————–
< ?php
chdir('..');
include "header.php";
// Якщо GD бібліотеки не існує, відображати фіктивний образ
if( !function_exists('gd_info') || !empty($_GET['error']) )
{
header("Content-type: image/gif");
echo file_get_contents('error.gif');
exit();
}
// Rand color
function &randomColor(&$image_handle)
{
static $imageColors;
if( empty($imageColors) ) $imageColors = array();
$color_element_red = rand(001, 150);
$color_element_green = rand(001, 150);
$color_element_blue = rand(001, 150);
$oColor = @ImageColorAllocate($image_handle, $color_element_red, $color_element_green, $color_element_blue);
$imageColors[] =& $oColor;
return $oColor;
}
// Main
session_start();
header("Content-type: image/png");
header("Cache-Control: no-cache");
/* ----- Config options ----- */
// Довжина в символах
$c_length = 6;
// Символи на вибір
$c_source = "123456789#()ABCDEFGHIJKLMNOPQRSTUVXWZ";
// Кількість випадкових пікселів на символ
$p_per_c_length = 15;
// DO NOT TOUCH!
$i_height = 20;
$i_width = (10*$c_length) + 7;
$p_amount = round($c_length * $p_per_c_length);
// Make image
$img_handle = @ImageCreate($i_width, $i_height);
$back_color = @ImageColorAllocate($img_handle, 255, 255, 255);
$transparent_bg = @ImageColorTransparent($img_handle, $back_color);
// Make code
$code = "";
$txt_color = array();
for( $count=0; $count<$c_length; $count++ )
{
$x_axis = 5 + ($count * 10);
$y_axis = rand(0, 7);
$randcolor = randomColor($img_handle);
$size = rand(3, 5);
$char = substr($c_source, rand(0, strlen($c_source)-1), 1);
$code .= "$char";
@ImageString($img_handle, $size, $x_axis, $y_axis, "$char", $randcolor);
}
// Make pixels
for( $count=0; $count<$p_amount; $count++ )
{
$x_axis = rand(1,$i_width);
$y_axis = rand(1,$i_height);
$randcolor = randomColor($img_handle);
@ImageSetPixel($img_handle, $x_axis, $y_axis, $randcolor);
}
$_SESSION['code'] = $code;
@ImagePng($img_handle);
exit();
?>
——————————————
Позитивним є те, що настроїти в цій капчі можна буквально все: кількість знаків, які саме цифри, літери та знаки використовувати, кількість «шумових» пікселів на кожен знак. Такий код безпеки набагато важче розпізнається роботами. Головне, не перестаратися — не ускладнити його настільки, що капчу не зможе зрозуміти й людина 🙂
Даний хак успішно використано на сайті спільноти професіоналів України — автореєстрації зникли.
Влад Циганик
Дивіться також
Меню категорій
- (не) Дизайн (8)
- Business (4)
- Design (3)
- Guide (1)
- Думи мої… (53)
- Звідусіль (98)
- Інтернети (16)
- Рідна мова (19)
- Шлях до успіху (8)