Той хто працював з CMS SocialEngine-3, мабуть, стикався з масовою реєстрацією ботів на сайті. Боти шкідливі тим, що залишають купу рекламного непотребу в блогах та подіях. На видалення цього непотребу та самих спамботів може йти доволі багато часу. Такий стан справ зумовлено тим, що стандартна капча (код безпеки) досить легко розпізнається і не захищає від автореєстрації.

socialengine

Як цьому зарадити? Найпростіше рішення — ускладнити стандартну капчу. Знайшов вирішення цієї проблеми і охоче ділюся ним з вами.

Правити будемо файл: /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(); ?>


——————————————
Позитивним є те, що настроїти в цій капчі можна буквально все: кількість знаків, які саме цифри, літери та знаки використовувати, кількість «шумових» пікселів на кожен знак. Такий код безпеки набагато важче розпізнається роботами. Головне, не перестаратися — не ускладнити його настільки, що капчу не зможе зрозуміти й людина 🙂

Даний хак успішно використано на сайті спільноти професіоналів України — автореєстрації зникли.