Quantcast
Channel: TeknicoPC SW » PHP
Viewing all articles
Browse latest Browse all 2

Antibot : bloquea Spam en tu web efectivamente

$
0
0

Haz sido victima de los Bots?, se registran en tu web masivamente y dejan publicados mensajes -non gratos- en tu foro?, ¿como logran registrarse?.

Hoy en día los programas maliciosos que recoletan información de  páginas web han proliferado con algoritmos más sofisticados que detectan y vulneran los métodos tradicionales de registro de algunos portales de contenido (CMS) , tal es el caso de Joomal, Php nuke , entre otros.

Y como podemos evitar esta situación? ,les voy a explicar como  implementar un captcha  con acceso a base de datos y no únicamente con métodos GET o POST  haciendo  uso del  mod SecImages ( hecho por truden para foros php-nuke) y que podemos aplicar en otros módulos o CMS, nos vamos a enfocar en el registro de nuevos usuarios (Your_Account) y el contactame (feedback)  de php nuke.

Descarga el módulo Security Images (140 descargas )  , descomprímelo y copialo en el root de tu nuke

Debes crear en tu base de datos la siguiente tabla

CREATE TABLE `security_images` (
   `ID` int(11) NOT NULL auto_increment,
   `insertdate` datetime NOT NULL default '0000-00-00 00:00:00',
   `referenceid` varchar(100) NOT NULL default '',
   `hiddentext` varchar(100) NOT NULL default '',
   PRIMARY KEY (`ID`)
) TYPE=MyISAM;

En este caso es altamente recomendable que edites el archivo config.php para cambiar la siguiente variable :

 $gfx_chk = 0;

Las siguientes dos funciones debes insertarlas en tu mainfile.php (preferentemente) o el modulo que vayas a proteger


//Define function to insert security image
function insertSecurityImage($inputname) {
   $refid = md5(mktime()*rand());
   $insertstr = "\"Security\n
   ";
   return $insertstr;
}

//Define function to check security image confirmation
function checkSecurityImage($referenceid, $enteredvalue) {
    global $stop, $user_prefix, $db;
   $referenceid = mysql_real_escape_string($referenceid);
   $enteredvalue = mysql_real_escape_string($enteredvalue);
if ($db->sql_numrows($db->sql_query("SELECT ID FROM security_images WHERE referenceid='".$referenceid."' AND hiddentext='".$enteredvalue."'")) > 0) {
    return true;
   } else {
      return false;
   }
  }

Campos a modificar en el archivo securityimage.php :

  1. “localhost” es tu localhost (generalmente este no cambia)
  2. “user”  username  de la base
  3. “password”  password de la base
  4. “dbname” nombre de la base

Para conocer los valores de dichos campos , abre  el config.php del root de tu nuke.

mysql_connect("localhost", "user", "password") or die(mysql_error());
mysql_select_db("dbname");

Puedes incluso cambiar los valores incluyendo letras y numeros o solo numeros(lenght = longitud, chars = caracteres a considerar) :


//Generate the random string
$chars = array("a","A","b","B","c","C","d","D","e","E","f","F","g",
"G","h","H","i","I","j","J","k",
"K","l","L","m","M","n","N","o","O","p","P","q","Q",
"r","R","s","S","t","T","u","U","v",
"V","w","W","x","X","y","Y","z","Z","1","2","3","4",
"5","6","7","8","9");
$length = 8;
If you change it to this:
//Generate the random string
$chars = array("1","2","3","4",
"5","6","7","8","9","0");
$length = 6;

Ahora ubica la funcion confirmNewUser(), a la cual le agregarás el campo $security_try en el parámetro , en la declaración de variables globales de la misma función y en el case.

function confirmNewUser($username, $user_email, $user_password, $user_password2, $random_num, $gfx_check,$security_try) {
 global $stop, $EditedMessage, $sitename, $module_name, $minpass,$security_try;

Ahora en el case queda así :

 case "new user":
 
 confirmNewUser($username, $user_email, $user_password, $user_password2, $random_num, $gfx_check,$security_try);
 break;

Bien, ahora ubica el siguiente bloque (dentro de la misma función ConfirmNewUser()

    if (!$stop) {
        $datekey = date("F j");
        $rcode = hexdec(md5($_SERVER['HTTP_USER_AGENT'] . $sitekey . $_POST['random_num'] .
            $datekey));
        $code = substr($rcode, 2, 6);
        if (extension_loaded("gd") and $code != $gfx_check and ($gfx_chk == 3 or $gfx_chk ==
            4 or $gfx_chk == 6 or $gfx_chk == 7)) {
            title("" . _NEWUSERERROR . "");
            OpenTable();
            echo "
" . _SECCODEINCOR . "

" . "" . _GOBACK . "
";             CloseTable();             include ("footer.php");             die();         }

Posterior al bloque mencionado, introducimos la validación del captcha, estamos haciendo uso de dos variables vitales para este proceso ya que estamos generando el codigo en la base y ligada a una referencia :

   $security_refid = $_POST[security_refid];
   $security_try = $_POST[security_try];

   $checkSecurity = rcheckSecurityImage($security_refid, $security_try);
  
     if (!$checkSecurity){
     title(""._NEWUSERERROR."");
   OpenTable();
   echo "
"._SECCODEINCOR."

"    .""._GOBACK."
";    CloseTable();    include("footer.php");    die();    }       

Si seguiste las indicaciones tu función completa debe apreciarse asi (considerando que solo tienes este mod)

function confirmNewUser($username, $user_email, $user_password, $user_password2, $random_num, $gfx_check,$security_try) {
 global $stop, $EditedMessage, $sitename, $module_name, $minpass,$security_try;
 include("header.php");
 include("config.php");
 $username = filter($username, nohtml);
 $user_email = filter($user_email, nohtml);
 $user_viewemail = "0";
 userCheck($username, $user_email);
 if (!$stop) {
  $datekey = date("F j");
  $rcode = hexdec(md5($_SERVER[HTTP_USER_AGENT] . $sitekey . $_POST[random_num] . $datekey));
  $code = substr($rcode, 2, 6);
  if (extension_loaded("gd") AND $code != $gfx_check AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
   title(""._NEWUSERERROR."");
   OpenTable();
   echo "
"._SECCODEINCOR."

"    .""._GOBACK."
";    CloseTable();    include("footer.php");    die();   }    $security_refid = $_POST[security_refid];    $security_try = $_POST[security_try];       $checkSecurity = rcheckSecurityImage($security_refid, $security_try);         if (!$checkSecurity){      title(""._NEWUSERERROR."");    OpenTable();    echo "
"._SECCODEINCOR."

"    .""._GOBACK."
";    CloseTable();    include("footer.php");    die();    }                  if ($user_password == "" AND $user_password2 == "") {    $user_password = makepass();   } elseif ($user_password != $user_password2) {    title(""._NEWUSERERROR."");    OpenTable();    echo "
"._PASSDIFFERENT."

"._GOBACK."
";    CloseTable();    include("footer.php");    die();   } elseif ($user_password == $user_password2 AND strlen($user_password) "._YOUPASSMUSTBE." $minpass "._CHARLONG."

"._GOBACK."";    CloseTable();    include("footer.php");    die();   }   title("$sitename: "._USERREGLOGIN."");   OpenTable();   echo "
"._USERFINALSTEP."

$username, "._USERCHECKDATA."


"   ."
"   .""   ."
"._UUSERNAME.": $username
"._EMAIL.": $user_email


"   ."
"._NOTE." "._YOUWILLRECEIVE."";   echo "
"   .""   .""   .""   .""   .""   ."

"   ."   "._GOBACK."
";   CloseTable();  } else {   OpenTable();   echo "
Registration Error!

";   echo "$stop
"._GOBACK."
";   CloseTable();  }  include("footer.php"); }

Continuamos, ahora sigue la función new_user()

function new_user() {
    global $my_headlines, $module_name, $db, $gfx_chk;

A la que tambien le agregaremos la variable $security_try :

function new_user() {
 global $my_headlines, $module_name, $db, $gfx_chk,$security_try;

Ubica en dicha funcion el siguiente bloque :

 if (extension_loaded("gd") AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
     echo ""._SECURITYCODE.":"._SECURITYCODE."\n"
         .""._TYPESECCODE.":\n"
         ."\n";
 }

El bloque anterior queda sin efecto siempre y cuando hayas cambiado el valor en el config.php, posterior a dicho bloque inserta:

    $imagenseguridad = insertSecurityImage('security_refid');
       
   echo ""._SECURITYCODE.":$imagenseguridad\n"
   .""._TYPESECCODE.":\n";

El bloque debe ser semejante a esto (la validacion debe quedar dentro del form) -pon atención a la variable $imagenseguridad

  echo "
\n"   .""._REGNEWUSER." ("._ALLREQUIRED.")

\n"   ."\n"   ."\n"   ."\n"   ."\n"   ."\n";   if (extension_loaded("gd") AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {    echo "\n"    ."\n"    ."\n";   }                 $imagenseguridad = insertSecurityImage('security_refid');            echo "\n"    ."\n";          echo "
"._NICKNAME.":
"._EMAIL.":
"._PASSWORD.":
"._RETYPEPASSWORD.":
("._BLANKFORAUTO.")
"._SECURITYCODE.":"._SECURITYCODE."
"._TYPESECCODE.":
"._SECURITYCODE.":$imagenseguridad
"._TYPESECCODE.":
\n"   ."\n"   ."\n"   ."
\n"   ."
\n"   ."
\n"

Con esto concluimos la modificación para evitar que bots se registren automáticamente en tu web php nuke, este mod puede ser instalado en cualquier portal (ya presentare casos de prueba).



                       

Viewing all articles
Browse latest Browse all 2

Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Trending Articles


Ang Nobela sa “From Darna to ZsaZsa Zaturnnah: Desire and Fantasy, Essays on...


Lola Bunny para colorear


Dino Rey para colorear


Girasoles para colorear


Dibujos de animales para imprimir


Renos para colorear


Dromedario para colorear


Love Quotes Tagalog


Mga Patama Quotes at Pamatay Banat Quotes


RE: Mutton Pies (mely)


Gwapo Quotes : Babaero Quotes


Kung Fu Panda para colorear


Libros para colorear


Mandalas de flores para colorear


Dibujos para colorear de perros


Toro para colorear


mayabang Quotes, Torpe Quotes, tanga Quotes


Long Distance Relationship Tagalog Love Quotes


Love Quotes Tagalog


Mga Tala sa “Unang Siglo ng Nobela sa Filipinas” (2009) ni Virgilio S. Almario





Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC