Temos pavadinimas: WordPress, Shopify ir PHPFusion programuotojų bendruomenė :: Captcha Beta 2 - Test for advanced users

Parašė ozzWANTED· 2008 Sau. 21 15:01:41
#1

Taigi, kaip ir buvau žadėjęs, bei dev staff komandai neprieštaravus, papostinu pagal mano idėjas papildytos Captcha sistemos 2.0 beta versiją entuziastams, mėgėjams ar testuotojams. Kokybė sucks, bet ši Captcha modifikacija yra kur kas saugesnė už buvusią - nuo šiol tekstas bus:
1.skirtingų fontų
2.skirtingo pasukimo kampo
3.perbrauktu foreground.
4.Skirtingų dydžių.

Kokybė:


Instaliacija(visiems naujokams geriau nė nekišti nagų):
Replace'inate esamą Php-Fusion v6 "/includes/captcha_include.php" failą su šiuo:
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright © 2002 - 2007 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: captcha_include.php
| CVS Version: 1.00
| Author: Nick Jones (Digitanium)
| Co-Author: Robert Gaudyn (Wooya) / Amra (sumotoy.net)
| Revision: Max Toball (Matonor)
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
if (isset($_GET['captcha_code']) && preg_match("/^[0-9A-Za-z]+$/", $_GET['captcha_code'])) {

   function rgb_rand($min=0,$max=255) {
      $color['r'] = rand($min,$max);
      $color['g'] = rand($min,$max);
      $color['b'] = rand($min,$max);
      return $color;
   }
   function rgb_grayscale($rgb) {
      $color['r'] = 0.299 * $rgb['r'] + 0.587 * $rgb['g'] + 0.114 * $rgb['b'];
      $color['g'] = 0.299 * $rgb['r'] + 0.587 * $rgb['g'] + 0.114 * $rgb['b'];
      $color['b'] = 0.299 * $rgb['r'] + 0.587 * $rgb['g'] + 0.114 * $rgb['b'];
      return $color;
   }
   function is_similar($color, $target){
      $grey = rgb_grayscale($color);
      foreach($target as $used_color){
         $used_grey = rgb_grayscale($used_color);
         if(abs($used_grey['r'] - $grey['r']) > 50) {
            return false;
         } else {
            continue;
         }
      }
      return true;
   }
   require_once "../config.php";

   mysql_connect($db_host, $db_user, $db_pass);
   mysql_select_db($db_name);

   $cresult = mysql_query("SELECT * FROM ".DB_PREFIX."captcha WHERE captcha_encode='".$_GET['captcha_code']."'");   if

(mysql_num_rows($cresult)) {
      $cdata = mysql_fetch_assoc($cresult);
      $im_wdth = 100;
      $im_hght = 40;
      $im = imagecreate($im_wdth,$im_hght);
      $used_colors = array();
      //background
      $bg = rgb_rand(90,165);
      imagefill($im, $im_wdth, $im_hght, imagecolorallocate($im, $bg['r'], $bg['g'], $bg['b']));
      //perturbation
      $lines = mt_rand(10,20);
      $dots = mt_rand(10,50);
      imagesetthickness($im, 6);
      for($i=0; $i<=$lines; $i++){
         $color = rgb_rand(90,165);
         $used_colors[] = $color;
         $color = imagecolorallocate($im, $color['r'], $color['g'], $color['b']);
         imageline($im, 0, rand(0, $im_hght), $im_wdth, rand(0, $im_hght), $color);
      }
      for($i=0; $i<=$dots; $i++){
         $color = rgb_rand(90,165);
         $used_colors[] = $color;
         $color = imagecolorallocate($im, $color['r'], $color['g'], $color['b']);
         imagefilledellipse($im, mt_rand(0, $im_wdth), mt_rand(0, $im_hght), 1, 1, $color);
      }

      //chars
      $chars = str_split($cdata['captcha_string']);
      $chars_left = count($chars);
      $char_space = $im_wdth/$chars_left;
      $char_pos = array(0, 0);
      $char_colors = array();
      if(function_exists("imagettftext")){
         $fonts = array();
         $font_dir = opendir("fonts");
         while (false !== ($file = readdir($font_dir))) {
            if(substr($file, -3) == "ttf"){
               $fonts[] = $file;
            }
         }
      }
      foreach($chars as $char){
         do{
            if(mt_rand(0,1))
               $color = rgb_rand(0,100);
            else
               $color = rgb_rand(155,255);
         }while(is_similar($color, $used_colors));

         $char_colors[] = $color;

         $x = $im_wdth - ($chars_left * $char_space) + mt_rand(0, $char_space * 0.5);
         $y = round($im_hght/2) + mt_rand(-round($im_hght/6), round($im_hght/6)) -10;
         $char_color = imagecolorallocate($im, $color['r'], $color['g'], $color['b']);
         if(!function_exists("imagettftext")){
            imagechar($im, 9, $x+1, $y+1, $char, $char_color+10);
            imagechar($im, 9, $x, $y, $char, $char_color);
         }else{
            $font = $fonts[array_rand($fonts)];
            $size = rand(10,14);
            imagettftext($im, $size, rand(-30,30), $x, $size+$y, $char_color, "fonts/".$font, $char);
         }
         $char_pos[0] = $x;
         $char_pos[1] = $y;
         $chars_left--;
      }

      //foreground perturbation
      imagesetthickness($im, 1);
      $i = 0;
      foreach($char_colors as $color){
         $i++;
         if($i%2 == 0){
            $color = imagecolorallocate($im, $color['r'], $color['g'], $color['b']);
            imageline($im, 0, rand(0, $im_hght), $im_wdth, rand(0, $im_hght), $color);
            imagefilledellipse($im, mt_rand(0, $im_wdth), mt_rand(0, $im_hght), 1, 1, $color);
         }
      }
      $out = imagecreate($im_wdth*1.5,$im_hght*1.5);
      imagecopyresampled($out, $im, 0, 0, 0, 0, $im_wdth*1.5, $im_hght*1.5, $im_wdth, $im_hght);
      header('Content-type: image/jpeg');
      imagejpeg($out);
      imagedestroy($im);
      imagedestroy($out);
   }
   exit;
}
?>




Bei parsisiunčiate "Fontus" ir patalpinate "fonts" direktoriją į "/includes/" Php-Fusion turinio valdymo sistemos direktoriją:
Siųstis Fontus
Siųstis naująjį "captcha include.php"

Peržiūrėti naująjį "captcha include.php"

Kam ši sistema skirta manau aiškinti nereikia.

Redagavo ozzWANTED· 2008 Sau. 22 19:01:19