Bienvenido: ( Identificarse | Registrarse )      
Foros de Trucos Windows
 
Closed TopicStart new topicStart Poll

Outline · [ Estándar ] · Lineal+

> Evitar Spam En Foros Ipb 2.1.x, Tutorial

Joalban
post Mar 5 2007, 12:32 PM
Publicado: #1


Gran Elegido
Group Icon

Grupo: Miembros Vitalicios
Mensajes: 4.963
Registrado: 5-January 05
Desde: Tarragona-España
Miembro nº: 54.870



La mayoria de los Bots Spameadores ya han aprendido a registrarse en todos los IPB's anteriores a la version 2.2.x.

Se puede incrementar el nivel de seguridad modificando la imagen GD Anti-Spam .

-> poniendo una plantilla de imagenes distintas
-> utilizando Fonts mas dificiles de leer ( ojo, pensar que los usuarios tienen que poder leerlas para poder registrarse...)

A Raiz del servidor, es decir en ./ tenemos que crear una carpeta llamada : "fonts" , en donde subiremos fonts descargadas previamente.
-se pueden descargar de dafont.com por ejemplo.


--------------------------

Buscar y Abrir :

CODE
./sources/ipsclass.php


Buscar

CODE
function show_gd_img($content="")
{
 $content = '  '. preg_replace( "/(\w)/", "\\1 ", $content ) .' ';
 
 @header("Content-Type: image/jpeg");
 
 $tmp_x = 140;
 $tmp_y = 20;
 
 $image_x = 210;
 $image_y = 65;
 
 $circles = 3;
 
 if ( $this->vars['gd_version'] == 1 )
 {
  $tmp = imagecreate($tmp_x, $tmp_y);
  $im  = imagecreate($image_x, $image_y);
 }
 else
 {
  $tmp = imagecreatetruecolor($tmp_x, $tmp_y);
  $im  = imagecreatetruecolor($image_x, $image_y);
 }
 
 $white  = ImageColorAllocate($tmp, 255, 255, 255);
 $black  = ImageColorAllocate($tmp, 0, 0, 0);
 $grey   = ImageColorAllocate($tmp, 210, 210, 210 );
 
 imagefill($tmp, 0, 0, $white);
 
 for ( $i = 1; $i <= $circles; $i++ )
 {
  $values = array(
      0  => rand(0, $tmp_x - 10),
      1  => rand(0, $tmp_y - 3),
      2  => rand(0, $tmp_x - 10),
      3  => rand(0, $tmp_y - 3),
      4  => rand(0, $tmp_x - 10),
      5  => rand(0, $tmp_y - 3),
      6  => rand(0, $tmp_x - 10),
      7  => rand(0, $tmp_y - 3),
      8  => rand(0, $tmp_x - 10),
      9  => rand(0, $tmp_y - 3),
      10 => rand(0, $tmp_x - 10),
      11 => rand(0, $tmp_y - 3),
      );
 
  $randomcolor = imagecolorallocate( $tmp, rand(100,255), rand(100,255),rand(100,255) );
  imagefilledpolygon($tmp, $values, 6, $randomcolor );
 }

 imagestring($tmp, 5, 0, 2, $content, $black);
 
 //-----------------------------------------
 // Distort by resizing
 //-----------------------------------------
 
 imagecopyresized($im, $tmp, 0, 0, 0, 0, $image_x, $image_y, $tmp_x, $tmp_y);
 
 imagedestroy($tmp);
 
 $white   = ImageColorAllocate($im, 255, 255, 255);
 $black   = ImageColorAllocate($im, 0, 0, 0);
 $grey = ImageColorAllocate($im, 100, 100, 100 );
 
 $random_pixels = $image_x * $image_y / 10;
 
 for ($i = 0; $i < $random_pixels; $i++)
 {
  ImageSetPixel($im, rand(0, $image_x), rand(0, $image_y), $black);
 }
 
 $no_x_lines = ($image_x - 1) / 5;
 
 for ( $i = 0; $i <= $no_x_lines; $i++ )
 {
  // X lines
 
  ImageLine( $im, $i * $no_x_lines, 0, $i * $no_x_lines, $image_y, $grey );
 
  // Diag lines
 
  ImageLine( $im, $i * $no_x_lines, 0, ($i * $no_x_lines)+$no_x_lines, $image_y, $grey );
 }
 
 $no_y_lines = ($image_y - 1) / 5;
 
 for ( $i = 0; $i <= $no_y_lines; $i++ )
 {
  ImageLine( $im, 0, $i * $no_y_lines, $image_x, $i * $no_y_lines, $grey );
 }
 
 ImageJPEG($im);
 ImageDestroy($im);
 
 exit();
}



cambiar por

CODE
function show_gd_img($content="")
{
 $content = preg_replace( "/(\w)/", "\\1 ", $content );

 $textarray = explode(' ', $content);

 //---------------------------
 // Options
 //---------------------------
 $super_captcha = 0;   // One of the stronger Captcha Avalible through this mod

 $use_jpg = 0;    // Only turn this off if you dont want to use JPG backgrounds, if none are uploaded this has no effect
 $use_ttf = 1;    // Use TTF fonts, if none are uploaded this has no effect
 $use_gdf = 0;    // Use GDF fonts, TTF fonts will take preferance, if none are uploaded this has no effect

 $fonts_dir = ROOT_PATH.'fonts/'; // The directory were all fonts and jpgs are uploaded to

 //---------------------------
 // No More Options to play with
 //---------------------------

 $tmp_x = 160;
 $tmp_y = 30;
 
 $image_x = 210;
 $image_y = 65;
 
 $circles = 3;

 //-----------------------------
 // Get information from folder
 //-----------------------------
 $dh = opendir( $fonts_dir );
 $fonts = array();
 while ($icon = readdir($dh)) {
  if(preg_match("/(.gdf)/",$icon) && $use_gdf) {
   if($icon != '.' || $icon  != '..') {
    $gdf_fonts[] = $icon;
   }
  }
  if(preg_match("/(.ttf)/",$icon) && $use_ttf) {
   if($icon != '.' || $icon  != '..') {
    $ttf_fonts[] = $icon;
   }
  }
  if(preg_match("/(.jpg)/",$icon) && $use_jpg) {
   if($icon != '.' || $icon  != '..') {
    $jpg_files[] = $icon;
   }
  }
 }
 closedir($dh);
 
 $jpg_max = count($jpg_files) - 1;
 $gdf_max = count($gdf_fonts) - 1;
 $ttf_max = count($ttf_fonts) - 1;

 @header("Content-Type: image/jpeg");
   
 if ( $this->vars['gd_version'] == 1 ) {
  $tmp = imagecreate($tmp_x, $tmp_y);
  $im  = imagecreate($image_x, $image_y);
 } else {
  $tmp = imagecreatetruecolor($tmp_x, $tmp_y);
  $im  = imagecreatetruecolor($image_x, $image_y);
 }

 //------------------------------
 // Super Captcha
 //------------------------------
 if($super_captcha) {
  $color1 = rand(100,200);
  $color2 = rand(100,200);
  $color3 = rand(100,200);

  $color = imageColorAllocate($tmp, $color1, $color2, $color3);
  $textcolor = imageColorAllocate($tmp, $color1 - 10, $color2 - 10, $color3 - 10);

  imagefill($tmp, 0, 0, $color);

  $shadowcode = rand(20, 50);
  $shadowcolor = ImageColorAllocate($tmp, $color1 - 100, $color2 - 100, $color3 - 100 );

  foreach($textarray AS $number) {

   $rand = rand(0, $ttf_max);

   // Only Slight Changes in font size and angle
   $fontsize = rand(14,17);
   $angle = rand(-10,10);

   $aCharDetails = imageftbbox($fontsize, $angle, $fonts_dir."/".$ttf_fonts[$rand], $number);
   
   $iCharHeight = $aCharDetails[2] - $aCharDetails[5];
   $iY = $tmp_y / 2 + $iCharHeight / 4 + rand(-3, 3);

   $rand = rand(0, $ttf_max);

   $offsetx = 2;
   $offsety = 2;
     
   imagefttext($tmp, $fontsize, $angle, $i + $offsetx, $iY + $offsety, $shadowcolor, $fonts_dir."/".$ttf_fonts[$rand], $number);
   
   imagefttext($tmp, $fontsize, $angle, $i, $iY, $textcolor, $fonts_dir."/".$ttf_fonts[$rand], $number);

   $i = $i + rand(20, 45 - $fontsize);
  }
 }else {
  if(count($jpg_files) > 0) {
   $rand = rand(0, $jpg_max);
   $temp = imagecreatefromjpeg($fonts_dir."/".$jpg_files[$rand]);
   list($width, $height) = getimagesize($fonts_dir."/".$jpg_files[$rand]);

   imagecopyresized($tmp, $temp, 0, 0, 0, 0, $tmp_x, $tmp_y, $width, $height);
  }else{
   imagefill($tmp, 0, 0, ImageColorAllocate($tmp, rand(240,250), rand(240,250), rand(240,250)));

   for ( $i = 1; $i <= $circles; $i++ )
   {
    $values = array(
        0  => rand(0, $tmp_x - 10),
        1  => rand(0, $tmp_y - 3),
        2  => rand(0, $tmp_x - 10),
        3  => rand(0, $tmp_y - 3),
        4  => rand(0, $tmp_x - 10),
        5  => rand(0, $tmp_y - 3),
        6  => rand(0, $tmp_x - 10),
        7  => rand(0, $tmp_y - 3),
        8  => rand(0, $tmp_x - 10),
        9  => rand(0, $tmp_y - 3),
        10 => rand(0, $tmp_x - 10),
        11 => rand(0, $tmp_y - 3),
        );
   
    $randomcolor = imagecolorallocate( $tmp, rand(150,200), rand(150,200),rand(150,200) );
    imagefilledpolygon($tmp, $values, 6, $randomcolor );
   }
  }
 
  if(count($textarray) == 5) {
   $min = 30;
   $max = 40;
  }else if(count($textarray) == 6) {
   $min = 20;
   $max = 30;
  }else{
   $min = 2;
   $max = 10;
  }

  $i = rand($min, $max);
  foreach($textarray AS $number) {
   $color = ImageColorAllocate($tmp, rand(50, 150), rand(50, 150), rand(50, 150) );
   $shadowcolor = ImageColorAllocate($tmp, rand(50, 100), rand(50, 100), rand(50, 100) );

   if(count($ttf_fonts) > 0) {
    $rand = rand(0, $ttf_max);

    $fontsize = rand(18, 20);
    $angle = rand(-30, 30);

    $aCharDetails = imageftbbox($fontsize, $angle, $fonts_dir."/".$ttf_fonts[$rand], $number);
   
    $iCharHeight = $aCharDetails[2] - $aCharDetails[5];
    $iY = $tmp_y / 2 + $iCharHeight / 4 + rand(-3, 3);

    $rand = rand(0, $ttf_max);

    $offsetx = rand(1, 2);
    $offsety = rand(1, 2);
     
    imagefttext($tmp, $fontsize, $angle, $i + $offsetx, $iY + $offsety, $shadowcolor, $fonts_dir."/".$ttf_fonts[$rand], $number);
   
    imagefttext($tmp, $fontsize, $angle, $i, $iY, $color, $fonts_dir."/".$ttf_fonts[$rand], $number);

    $i = $i + rand(20, 45 - $fontsize);
   }else{
    if(count($gdf_fonts) > 0) {
     $rand = rand(0, $gdf_max);
     $font = imageloadfont($fonts_dir."/".$gdf_fonts[$rand]);
    }else{
     $font = rand(15,20);
    }

    $height = rand(0, 10);

    $offsetx = rand(1, 2);
    $offsety = rand(1, 2);

    imagestring($tmp, $font, $i + $offsetx, $height + $offsety, $number, $shadowcolor);

    imagestring($tmp, $font, $i, $height, $number, $color);

    $i = $i + rand(20, 30);
   }
  }
 }

 //-----------------------------------------
 // Distort by resizing
 //-----------------------------------------
 
 imagecopyresized($im, $tmp, 0, 0, 0, 0, $image_x, $image_y, $tmp_x, $tmp_y);
 
 imagedestroy($tmp);

 if($super_captcha) {
  $grey = $shadowcolor;
 }else{
  $random = rand(0,20);
  $grey = ImageColorAllocate($im, $random, $random, $random );
 }

 
 $random_pixels = $image_x * $image_y / 10;

 for ($i = 0; $i < $random_pixels; $i++) {
  $random = rand(0, 255);
  $pixelcolor = ImageColorAllocate($im, $random, $random, $random );
  ImageSetPixel($im, rand(0, $image_x), rand(0, $image_y), $pixelcolor);
 }
 
 $no_x_lines = ($image_x - 1) / 10;
 
 for ( $i = 0; $i <= $no_x_lines; $i++ ) {
  ImageLine( $im, $i * $no_x_lines, 0, $i * $no_x_lines, $image_y, $grey );
 }
 
 $no_y_lines = ($image_y - 1) / 5;
 
 for ( $i = 0; $i <= $no_y_lines; $i++ ) {
  ImageLine( $im, 0, $i * $no_y_lines, $image_x, $i * $no_y_lines, $grey );
 }
 
 ImageJPEG($im);
 ImageDestroy($im);
 
 exit();
}


Mas Fonts distintas tendreis, mas dificil sera para los bots registrarse o protegerse de un ataque masivo.
Las imagenes tambien se pueden modificar y hacer mas complicadas pero siempre tendrían que ser translucidas.



User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Joalban
post Mar 5 2007, 12:35 PM
Publicado: #2


Gran Elegido
Group Icon

Grupo: Miembros Vitalicios
Mensajes: 4.963
Registrado: 5-January 05
Desde: Tarragona-España
Miembro nº: 54.870



Para que esta modificación sea optima entrar en:

ACP (Panel Administracion) -> Tools & Settings -> Security & Privacy ->

Elegir la opcion Guest Posting Bot Control (Advanced (Requires GD Library)) y asi los invitados y bot tendran que poner el codigo de la imagen algo que los bot spanmer no pueden ver por lo tanto no pueden postear.

Esta proteccion contra los bots Spameadores puede ser ampliada con un Filtro de Dominios Mail o IP.

Fuente

Saludo



User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
Closed TopicTopic OptionsStart new topic

Collapse

> Topicos similares

Su cuenta esta configurada para evitar que util ... vesalio 111 1 Oct 4 2008, 05:39 PM
By: jando
Una demostración práctica sobre el funcionamien ... marga 128 0 Sep 25 2008, 01:57 AM
By: marga
Problemas en la actualización de los foros LordSauron 168 1 Sep 20 2008, 07:00 PM
By: LordSauron