<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tek Sir Warriors &#187; PHP</title>
	<atom:link href="http://www.clansirwarriors.net/category/programacion/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.clansirwarriors.net</link>
	<description>Hardware, Software, Reviews, Scripts y Retro</description>
	<lastBuildDate>Thu, 26 Jan 2012 19:41:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Antibot : bloquea Spam en tu web efectivamente</title>
		<link>http://www.clansirwarriors.net/antibot-bloquea-spam-efectivamente.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=antibot-bloquea-spam-efectivamente</link>
		<comments>http://www.clansirwarriors.net/antibot-bloquea-spam-efectivamente.html#comments</comments>
		<pubDate>Wed, 31 Mar 2010 05:49:11 +0000</pubDate>
		<dc:creator>SirAntuans</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[anti]]></category>
		<category><![CDATA[AntiSpam]]></category>
		<category><![CDATA[Bot]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[nuke]]></category>
		<category><![CDATA[SecImages]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.clansirwarriors.net/?p=409</guid>
		<description><![CDATA[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) [...]]]></description>
			<content:encoded><![CDATA[<g:plusone href="http://www.clansirwarriors.net/antibot-bloquea-spam-efectivamente.html"  size="standard"   annotation="none"  ></g:plusone><p>Haz sido victima de los Bots?, se registran en tu web masivamente y dejan publicados mensajes -non gratos- en tu foro?, ¿como logran registrarse?.</p>
<p>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.</p>
<p>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.</p>
<p>Descarga el módulo <a class="downloadlink" href="http://www.clansirwarriors.net/descarga-6" title=" downloaded 24 times" >Security Images (24)</a> , descomprímelo y copialo en el root de tu nuke</p>
<p>Debes crear en tu base de datos la siguiente tabla</p>
<pre class="brush: delphi; title: ; notranslate">
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;
</pre>
<p>En este caso es altamente recomendable que edites el archivo config.php para cambiar la siguiente variable :</p>
<pre class="brush: php; title: ; notranslate"> $gfx_chk = 0;</pre>
<p>Las siguientes dos funciones debes insertarlas en tu mainfile.php (preferentemente) o el modulo que vayas a proteger</p>
<pre class="brush: php; title: ; notranslate">

//Define function to insert security image
function insertSecurityImage($inputname) {
   $refid = md5(mktime()*rand());
   $insertstr = &quot;&lt;img src=\&quot;securityimage.php?refid=&quot;.$refid.&quot;\&quot; alt=\&quot;Security Image\&quot; /&gt;\n
   &lt;input type=\&quot;hidden\&quot; name=\&quot;&quot;.$inputname.&quot;\&quot; value=\&quot;&quot;.$refid.&quot;\&quot; /&gt;&quot;;
   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-&gt;sql_numrows($db-&gt;sql_query(&quot;SELECT ID FROM security_images WHERE referenceid='&quot;.$referenceid.&quot;' AND hiddentext='&quot;.$enteredvalue.&quot;'&quot;)) &gt; 0) {
    return true;
   } else {
      return false;
   }
  }
</pre>
<p>Campos a modificar en el archivo<strong> securityimage.php</strong> :</p>
<ol>
<li>&#8220;localhost&#8221; es tu localhost (generalmente este no cambia)</li>
<li>&#8220;user&#8221;  username  de la base</li>
<li>&#8220;password&#8221;  password de la base</li>
<li>&#8220;dbname&#8221; nombre de la base</li>
</ol>
<p>Para conocer los valores de dichos campos , abre  el config.php del root de tu nuke.</p>
<pre class="brush: php; title: ; notranslate">
mysql_connect(&quot;localhost&quot;, &quot;user&quot;, &quot;password&quot;) or die(mysql_error());
mysql_select_db(&quot;dbname&quot;);
</pre>
<p>Puedes incluso cambiar los valores incluyendo letras y numeros o solo numeros(lenght = longitud, chars = caracteres a considerar) :</p>
<pre class="brush: php; title: ; notranslate">

//Generate the random string
$chars = array(&quot;a&quot;,&quot;A&quot;,&quot;b&quot;,&quot;B&quot;,&quot;c&quot;,&quot;C&quot;,&quot;d&quot;,&quot;D&quot;,&quot;e&quot;,&quot;E&quot;,&quot;f&quot;,&quot;F&quot;,&quot;g&quot;,
&quot;G&quot;,&quot;h&quot;,&quot;H&quot;,&quot;i&quot;,&quot;I&quot;,&quot;j&quot;,&quot;J&quot;,&quot;k&quot;,
&quot;K&quot;,&quot;l&quot;,&quot;L&quot;,&quot;m&quot;,&quot;M&quot;,&quot;n&quot;,&quot;N&quot;,&quot;o&quot;,&quot;O&quot;,&quot;p&quot;,&quot;P&quot;,&quot;q&quot;,&quot;Q&quot;,
&quot;r&quot;,&quot;R&quot;,&quot;s&quot;,&quot;S&quot;,&quot;t&quot;,&quot;T&quot;,&quot;u&quot;,&quot;U&quot;,&quot;v&quot;,
&quot;V&quot;,&quot;w&quot;,&quot;W&quot;,&quot;x&quot;,&quot;X&quot;,&quot;y&quot;,&quot;Y&quot;,&quot;z&quot;,&quot;Z&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;4&quot;,
&quot;5&quot;,&quot;6&quot;,&quot;7&quot;,&quot;8&quot;,&quot;9&quot;);
$length = 8;
If you change it to this:
//Generate the random string
$chars = array(&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;4&quot;,
&quot;5&quot;,&quot;6&quot;,&quot;7&quot;,&quot;8&quot;,&quot;9&quot;,&quot;0&quot;);
$length = 6;
</pre>
<p>Ahora ubica la funcion confirmNewUser(), a la cual le agregarás el campo <strong>$security_try</strong> en el parámetro , en la declaración de variables globales de la misma función y en el case.</p>
<pre class="brush: php; title: ; notranslate">
function confirmNewUser($username, $user_email, $user_password, $user_password2, $random_num, $gfx_check,$security_try) {
 global $stop, $EditedMessage, $sitename, $module_name, $minpass,$security_try;</pre>
<p>Ahora en el case queda así :</p>
<pre class="brush: php; title: ; notranslate">
 case &quot;new user&quot;:
 
 confirmNewUser($username, $user_email, $user_password, $user_password2, $random_num, $gfx_check,$security_try);
 break;
</pre>
<p>Bien, ahora ubica el siguiente bloque (dentro de la misma función ConfirmNewUser()</p>
<pre class="brush: php; title: ; notranslate">
    if (!$stop) {
        $datekey = date(&quot;F j&quot;);
        $rcode = hexdec(md5($_SERVER['HTTP_USER_AGENT'] . $sitekey . $_POST['random_num'] .
            $datekey));
        $code = substr($rcode, 2, 6);
        if (extension_loaded(&quot;gd&quot;) and $code != $gfx_check and ($gfx_chk == 3 or $gfx_chk ==
            4 or $gfx_chk == 6 or $gfx_chk == 7)) {
            title(&quot;&quot; . _NEWUSERERROR . &quot;&quot;);
            OpenTable();
            echo &quot;&lt;center&gt;&lt;b&gt;&quot; . _SECCODEINCOR . &quot;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&quot; . &quot;&quot; . _GOBACK . &quot;&lt;/center&gt;&quot;;
            CloseTable();
            include (&quot;footer.php&quot;);
            die();
        }
</pre>
<p>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 :</p>
<pre class="brush: php; title: ; notranslate">
   $security_refid = $_POST[security_refid];
   $security_try = $_POST[security_try];

   $checkSecurity = rcheckSecurityImage($security_refid, $security_try);
  
     if (!$checkSecurity){
     title(&quot;&quot;._NEWUSERERROR.&quot;&quot;);
   OpenTable();
   echo &quot;&lt;center&gt;&lt;b&gt;&quot;._SECCODEINCOR.&quot;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&quot;
   .&quot;&quot;._GOBACK.&quot;&lt;/center&gt;&quot;;
   CloseTable();
   include(&quot;footer.php&quot;);
   die();
   }       
</pre>
<p>Si seguiste las indicaciones tu función completa debe apreciarse asi (considerando que solo tienes este mod)</p>
<pre class="brush: php; title: ; notranslate">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(&quot;header.php&quot;);
 include(&quot;config.php&quot;);
 $username = filter($username, nohtml);
 $user_email = filter($user_email, nohtml);
 $user_viewemail = &quot;0&quot;;
 userCheck($username, $user_email);
 if (!$stop) {
  $datekey = date(&quot;F j&quot;);
  $rcode = hexdec(md5($_SERVER[HTTP_USER_AGENT] . $sitekey . $_POST[random_num] . $datekey));
  $code = substr($rcode, 2, 6);
  if (extension_loaded(&quot;gd&quot;) AND $code != $gfx_check AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
   title(&quot;&quot;._NEWUSERERROR.&quot;&quot;);
   OpenTable();
   echo &quot;&lt;center&gt;&lt;b&gt;&quot;._SECCODEINCOR.&quot;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&quot;
   .&quot;&quot;._GOBACK.&quot;&lt;/center&gt;&quot;;
   CloseTable();
   include(&quot;footer.php&quot;);
   die();
  }

   $security_refid = $_POST[security_refid];
   $security_try = $_POST[security_try];
  
   $checkSecurity = rcheckSecurityImage($security_refid, $security_try);
  
     if (!$checkSecurity){
     title(&quot;&quot;._NEWUSERERROR.&quot;&quot;);
   OpenTable();
   echo &quot;&lt;center&gt;&lt;b&gt;&quot;._SECCODEINCOR.&quot;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&quot;
   .&quot;&quot;._GOBACK.&quot;&lt;/center&gt;&quot;;
   CloseTable();
   include(&quot;footer.php&quot;);
   die();
   }       
       
  if ($user_password == &quot;&quot; AND $user_password2 == &quot;&quot;) {
   $user_password = makepass();
  } elseif ($user_password != $user_password2) {
   title(&quot;&quot;._NEWUSERERROR.&quot;&quot;);
   OpenTable();
   echo &quot;&lt;center&gt;&lt;b&gt;&quot;._PASSDIFFERENT.&quot;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&quot;._GOBACK.&quot;&lt;/center&gt;&quot;;
   CloseTable();
   include(&quot;footer.php&quot;);
   die();
  } elseif ($user_password == $user_password2 AND strlen($user_password) &lt; $minpass) {
   title(&quot;&quot;._NEWUSERERROR.&quot;&quot;);
   OpenTable();
   echo &quot;&lt;center&gt;&quot;._YOUPASSMUSTBE.&quot; &lt;b&gt;$minpass&lt;/b&gt; &quot;._CHARLONG.&quot;&lt;br&gt;&lt;br&gt;&quot;._GOBACK.&quot;&lt;/center&gt;&quot;;
   CloseTable();
   include(&quot;footer.php&quot;);
   die();
  }
  title(&quot;$sitename: &quot;._USERREGLOGIN.&quot;&quot;);
  OpenTable();
  echo &quot;&lt;center&gt;&lt;b&gt;&quot;._USERFINALSTEP.&quot;&lt;/b&gt;&lt;br&gt;&lt;br&gt;$username, &quot;._USERCHECKDATA.&quot;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&quot;
  .&quot;&lt;table align='center' border='0'&gt;&quot;
  .&quot;&lt;tr&gt;&lt;td&gt;&lt;b&gt;&quot;._UUSERNAME.&quot;:&lt;/b&gt; $username&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&quot;
  .&quot;&lt;tr&gt;&lt;td&gt;&lt;b&gt;&quot;._EMAIL.&quot;:&lt;/b&gt; $user_email&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&quot;
  .&quot;&lt;center&gt;&lt;b&gt;&quot;._NOTE.&quot;&lt;/b&gt; &quot;._YOUWILLRECEIVE.&quot;&quot;;
  echo &quot;&lt;form action=\&quot;modules.php?name=$module_name\&quot; method=\&quot;post\&quot;&gt;&quot;
  .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;random_num\&quot; value=\&quot;$random_num\&quot;&gt;&quot;
  .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;gfx_check\&quot; value=\&quot;$gfx_check\&quot;&gt;&quot;
  .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;username\&quot; value=\&quot;$username\&quot;&gt;&quot;
  .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;user_email\&quot; value=\&quot;$user_email\&quot;&gt;&quot;
  .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;user_password\&quot; value=\&quot;$user_password\&quot;&gt;&quot;
  .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;op\&quot; value=\&quot;finish\&quot;&gt;&lt;br&gt;&lt;br&gt;&quot;
  .&quot;&lt;input type=\&quot;submit\&quot; value=\&quot;&quot;._FINISH.&quot;\&quot;&gt; &amp;nbsp;&amp;nbsp;&quot;._GOBACK.&quot;&lt;/form&gt;&lt;/center&gt;&quot;;
  CloseTable();
 } else {
  OpenTable();
  echo &quot;&lt;center&gt;&lt;font class=\&quot;title\&quot;&gt;&lt;b&gt;Registration Error!&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&quot;;
  echo &quot;&lt;font class=\&quot;content\&quot;&gt;$stop&lt;br&gt;&quot;._GOBACK.&quot;&lt;/font&gt;&lt;/center&gt;&quot;;
  CloseTable();
 }
 include(&quot;footer.php&quot;);
}
</pre>
<p>Continuamos, ahora sigue la función new_user()</p>
<pre class="brush: php; title: ; notranslate">
function new_user() {
    global $my_headlines, $module_name, $db, $gfx_chk;
</pre>
<p>A la que tambien le agregaremos la variable $security_try :</p>
<pre class="brush: php; title: ; notranslate">
function new_user() {
 global $my_headlines, $module_name, $db, $gfx_chk,$security_try;
</pre>
<p>Ubica en dicha funcion el siguiente bloque :</p>
<pre class="brush: php; title: ; notranslate">
 if (extension_loaded(&quot;gd&quot;) AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
     echo &quot;&lt;tr&gt;&lt;td&gt;&quot;._SECURITYCODE.&quot;:&lt;/td&gt;&lt;td&gt;&lt;img src='modules.php?name=$module_name&amp;op=gfx&amp;random_num=$random_num' border='1' alt='&quot;._SECURITYCODE.&quot;' title='&quot;._SECURITYCODE.&quot;'&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;
         .&quot;&lt;tr&gt;&lt;td&gt;&quot;._TYPESECCODE.&quot;:&lt;/td&gt;&lt;td&gt;&lt;input type=\&quot;text\&quot; NAME=\&quot;gfx_check\&quot; SIZE=\&quot;7\&quot; MAXLENGTH=\&quot;6\&quot;&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;
         .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;random_num\&quot; value=\&quot;$random_num\&quot;&gt;\n&quot;;
 }
</pre>
<p>El bloque anterior queda sin efecto siempre y cuando hayas cambiado el valor en el config.php, posterior a dicho bloque inserta:</p>
<pre class="brush: php; title: ; notranslate">
    $imagenseguridad = insertSecurityImage('security_refid');
       
   echo &quot;&lt;tr&gt;&lt;td&gt;&quot;._SECURITYCODE.&quot;:&lt;/td&gt;&lt;td&gt;$imagenseguridad&lt;/td&gt;&lt;/tr&gt;\n&quot;
   .&quot;&lt;tr&gt;&lt;td&gt;&quot;._TYPESECCODE.&quot;:&lt;/td&gt;&lt;td&gt;&lt;input type=\&quot;text\&quot; name=\&quot;security_try\&quot; SIZE=\&quot;6\&quot; MAXLENGTH=\&quot;6\&quot;&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;;
</pre>
<p>El bloque debe ser semejante a esto (la validacion debe quedar dentro del form) -pon atención a la variable $imagenseguridad</p>
<pre class="brush: php; title: ; notranslate">
  echo &quot;&lt;form action=\&quot;modules.php?name=$module_name\&quot; method=\&quot;post\&quot;&gt;\n&quot;
  .&quot;&lt;b&gt;&quot;._REGNEWUSER.&quot;&lt;/b&gt; (&quot;._ALLREQUIRED.&quot;)&lt;br&gt;&lt;br&gt;\n&quot;
  .&quot;&lt;table cellpadding=\&quot;0\&quot; cellspacing=\&quot;10\&quot; border=\&quot;0\&quot;&gt;\n&quot;
  .&quot;&lt;tr&gt;&lt;td&gt;&quot;._NICKNAME.&quot;:&lt;/td&gt;&lt;td&gt;&lt;input type=\&quot;text\&quot; name=\&quot;username\&quot; size=\&quot;30\&quot; maxlength=\&quot;25\&quot;&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;
  .&quot;&lt;tr&gt;&lt;td&gt;&quot;._EMAIL.&quot;:&lt;/td&gt;&lt;td&gt;&lt;input type=\&quot;text\&quot; name=\&quot;user_email\&quot; size=\&quot;30\&quot; maxlength=\&quot;255\&quot;&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;
  .&quot;&lt;tr&gt;&lt;td&gt;&quot;._PASSWORD.&quot;:&lt;/td&gt;&lt;td&gt;&lt;input type=\&quot;password\&quot; name=\&quot;user_password\&quot; size=\&quot;11\&quot; maxlength=\&quot;40\&quot;&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;
  .&quot;&lt;tr&gt;&lt;td&gt;&quot;._RETYPEPASSWORD.&quot;:&lt;/td&gt;&lt;td&gt;&lt;input type=\&quot;password\&quot; name=\&quot;user_password2\&quot; size=\&quot;11\&quot; maxlength=\&quot;40\&quot;&gt;&lt;br&gt;&lt;font class=\&quot;tiny\&quot;&gt;(&quot;._BLANKFORAUTO.&quot;)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;;
  if (extension_loaded(&quot;gd&quot;) AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
   echo &quot;&lt;tr&gt;&lt;td&gt;&quot;._SECURITYCODE.&quot;:&lt;/td&gt;&lt;td&gt;&lt;img src='?gfx=gfx&amp;random_num=$random_num' border='1' alt='&quot;._SECURITYCODE.&quot;' title='&quot;._SECURITYCODE.&quot;'&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;
   .&quot;&lt;tr&gt;&lt;td&gt;&quot;._TYPESECCODE.&quot;:&lt;/td&gt;&lt;td&gt;&lt;input type=\&quot;text\&quot; NAME=\&quot;gfx_check\&quot; SIZE=\&quot;7\&quot; MAXLENGTH=\&quot;6\&quot;&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;
   .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;random_num\&quot; value=\&quot;$random_num\&quot;&gt;\n&quot;;
  }
       
        $imagenseguridad = insertSecurityImage('security_refid');
       
   echo &quot;&lt;tr&gt;&lt;td&gt;&quot;._SECURITYCODE.&quot;:&lt;/td&gt;&lt;td&gt;$imagenseguridad&lt;/td&gt;&lt;/tr&gt;\n&quot;
   .&quot;&lt;tr&gt;&lt;td&gt;&quot;._TYPESECCODE.&quot;:&lt;/td&gt;&lt;td&gt;&lt;input type=\&quot;text\&quot; name=\&quot;security_try\&quot; SIZE=\&quot;6\&quot; MAXLENGTH=\&quot;6\&quot;&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;;
   
  
  echo &quot;&lt;tr&gt;&lt;td colspan='2'&gt;\n&quot;
  .&quot;&lt;input type=\&quot;hidden\&quot; name=\&quot;op\&quot; value=\&quot;new user\&quot;&gt;\n&quot;

  .&quot;&lt;input type=\&quot;submit\&quot; value=\&quot;&quot;._NEWUSER.&quot;\&quot;&gt;\n&quot;
  .&quot;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;\n&quot;
  .&quot;&lt;/form&gt;\n&quot;
  .&quot;&lt;br&gt;\n&quot;
</pre>
<p>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).</p>
<pre></pre>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.clansirwarriors.net%2Fantibot-bloquea-spam-efectivamente.html&amp;title=Antibot%20%3A%20bloquea%20Spam%20en%20tu%20web%20efectivamente" id="wpa2a_2"><img src="http://www.clansirwarriors.net/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.clansirwarriors.net/antibot-bloquea-spam-efectivamente.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementar Gravatar en Php Nuke</title>
		<link>http://www.clansirwarriors.net/implementar-gravatar-en-php-nuke.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=implementar-gravatar-en-php-nuke</link>
		<comments>http://www.clansirwarriors.net/implementar-gravatar-en-php-nuke.html#comments</comments>
		<pubDate>Wed, 03 Mar 2010 14:19:31 +0000</pubDate>
		<dc:creator>SirAntuans</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[avatar]]></category>
		<category><![CDATA[gravatar]]></category>
		<category><![CDATA[imagenes]]></category>
		<category><![CDATA[implementar]]></category>
		<category><![CDATA[nuke]]></category>

		<guid isPermaLink="false">http://www.clansirwarriors.net/?p=336</guid>
		<description><![CDATA[Gravatar tu avatar global &#8230;disponible en portales como WordPress entre otros , ¿pero que hay de Php Nuke?, nukeros  tengo una buena noticia que darles y es que sin hacer grandes cambios podemos implementar Gravatar para el perfil Nuke. Descarga este archivo , descomprímelo y copialo a la carpeta includes de tu nuke (tomado de Clase [...]]]></description>
			<content:encoded><![CDATA[<g:plusone href="http://www.clansirwarriors.net/implementar-gravatar-en-php-nuke.html"  size="standard"   annotation="none"  ></g:plusone><p>Gravatar tu avatar global &#8230;disponible en portales como WordPress entre otros , ¿pero que hay de Php Nuke?, nukeros  tengo una buena noticia que darles y es que sin hacer grandes cambios podemos implementar Gravatar para el perfil Nuke.</p>
<p>Descarga este archivo <a class="downloadlink" href="http://www.clansirwarriors.net/descarga-5" title=" downloaded 23 times" >Clase Gravatar (23)</a> , descomprímelo y copialo a la carpeta includes de tu nuke (tomado de <a title="Clase Gravatar" href="http://www.phpclasses.org/browse/package/4227.html" target="_blank">Clase Gravatar</a> )</p>
<p>Localiza el archivo index.php del modulo Your_Account e inserta el siguiente bloque  antes de la función <strong>userCheck </strong>(este bloque nos servira para obtener el email del perfil nuke y con ese dato ir a buscar el avatar)</p>
<pre class="brush: php; title: ; notranslate">#Uso de Gravatar
include_once(&quot;includes/classGravatar.php&quot;);

function getemailfromuid($uid)
{
    global $prefix, $db, $user_prefix;
    $sql = &quot;SELECT user_email, username,user_id FROM &quot; . $user_prefix .
        &quot;_users WHERE user_id='$uid'&quot;;
    $result = $db-&gt;sql_query($sql);
    $row = $db-&gt;sql_fetchrow($result);
    $correo_obtenido = $row[user_email];
    return $correo_obtenido;
}</pre>
<p>O bien podemos insertar el código anterior en el archivo mainfile.php justo al final del archivo antes del &#8221; ?&gt; &#8221;</p>
<p>Hasta ahí vamos bien?, perfecto ubica en el mismo archivo index.php del modulo Your_Account la función llamada<strong> avatarlinksave</strong>, donde vamos a incluir una pequeña corrección para que al ingresar una &#8220;G&#8221; ó &#8220;g&#8221; en el área donde se definen imagenes remotas, vayamos directo a gravatar.com a obtener el avatar, sin afectar la funcionalidad actual, ya que si introduces un link remoto este seguirá funcionando como de costumbre.</p>
<p>busca en tu archivo index.php funcion avatarlinksave:</p>
<pre class="brush: php; title: ; notranslate">   $sql = &quot;SELECT * FROM &quot; . $prefix .
        &quot;_bbconfig WHERE config_name = 'allow_avatar_remote'&quot;;
    $result = $db-&gt;sql_query($sql);
    if ($row = $db-&gt;sql_fetchrow($result)) {
        $allow_avatar_remote = $row['config_value'];
    } else {
        $allow_avatar_remote = 0;
    }
    if (is_user($user) and $allow_avatar_remote) {
        getusrinfo($user);
        cookiedecode($user);
        include (&quot;header.php&quot;);
        title(&quot;Seleccion de Avatar Correcta!&quot;);
        OpenTable();
        nav();
        CloseTable();</pre>
<p>Justo después del CloseTable() introducimos lo siguiente:</p>
<pre class="brush: php; title: ; notranslate">#Uso de Gravatar      
        if ((strlen($avatar)==1)&amp;&amp;(strtoupper($avatar)==&quot;G&quot;)){
            $correouser =getemailfromuid(intval($cookie[0]));
            #$default = &quot;tu imagen default&quot;; // Optional
            $gravatar = new Gravatar($correouser, $default);
            $gravatar-&gt;size = 80;
            $gravatar-&gt;rating = &quot;G&quot;;
            $gravatar-&gt;border = &quot;FF0000&quot;;
            $avatar = $gravatar-&gt;getSrc();
            $gravatarON = true;     
        } else{
            $gravatarON =false;
        }
#End Uso Gravatar</pre>
<p>Posterior a el código descrito encontramos:</p>
<pre class="brush: php; title: ; notranslate">        OpenTable();
        if (!preg_match(&quot;#^http:\/\/#i&quot;, $avatar)) {
            $avatar = &quot;http://&quot; . $avatar;
        }</pre>
<p>Justo después de esta condición y antes del &#8221; if (preg_match(&#8220;#^(http:\/\/&#8221; &#8230;.) insertamos</p>
<pre class="brush: php; title: ; notranslate">#Uso de Gravatar
    if ($gravatarON){
            $db-&gt;sql_query(&quot;UPDATE &quot; . $user_prefix . &quot;_users SET user_avatar='$avatar', user_avatar_type='2' WHERE user_id = '&quot; .
                intval($cookie[0]) . &quot;'&quot;);
            echo &quot;&lt;center&gt;&lt;font class=\&quot;content\&quot;&gt;Avatar for &quot; . $cookie[1] .
                &quot; Saved!&lt;/center&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&quot;;
            echo &quot;&lt;center&gt;Tu nuevo Gravatar :&lt;br&gt;&lt;br&gt;&lt;IMG alt=\&quot;\&quot; src=\&quot;$avatar\&quot;&gt;&lt;br&gt;&lt;br&gt;[ &lt;a href=\&quot;modules.php?name=$module_name&amp;op=edituser\&quot;&gt;Back to Profile&lt;/a&gt; | &lt;a href=\&quot;modules.php?name=$module_name\&quot;&gt;Done&lt;/a&gt; ]&lt;br&gt;&lt;br&gt;&lt;/center&gt;&quot;;
        } else {</pre>
<p>Y antes del siguiente CloseTable() , cerramos el if</p>
<pre class="brush: php; title: ; notranslate">    } //End- Uso de Gravatar</pre>
<p> La función queda así:</p>
<pre class="brush: php; title: ; notranslate">function avatarlinksave($avatar)
{
    global $user_prefix, $db, $module_name, $user, $cookie, $prefix;
    $sql = &quot;SELECT * FROM &quot; . $prefix .
        &quot;_bbconfig WHERE config_name = 'allow_avatar_remote'&quot;;
    $result = $db-&gt;sql_query($sql);
    if ($row = $db-&gt;sql_fetchrow($result)) {
        $allow_avatar_remote = $row['config_value'];
    } else {
        $allow_avatar_remote = 0;
    }
    if (is_user($user) and $allow_avatar_remote) {
        getusrinfo($user);
        cookiedecode($user);
        include (&quot;header.php&quot;);
        title(&quot;Seleccion de Avatar Correcta!&quot;);
        OpenTable();
        nav();
        CloseTable();
#Uso de Gravatar      
        if ((strlen($avatar)==1)&amp;&amp;(strtoupper($avatar)==&quot;G&quot;)){
            $correouser =getemailfromuid(intval($cookie[0]));
            $default = &quot;&quot;; // Optional
            $gravatar = new Gravatar($correouser, $default);
            $gravatar-&gt;size = 80;
            $gravatar-&gt;rating = &quot;G&quot;;
            $gravatar-&gt;border = &quot;FF0000&quot;;
            $avatar = $gravatar-&gt;getSrc();
            $gravatarON = true;     
        } else{
            $gravatarON =false;
        }
#End Uso Gravatar
        OpenTable();
        if (!preg_match(&quot;#^http:\/\/#i&quot;, $avatar)) {
            $avatar = &quot;http://&quot; . $avatar;
        }
#Uso de Gravatar
    if ($gravatarON){
            $db-&gt;sql_query(&quot;UPDATE &quot; . $user_prefix . &quot;_users SET user_avatar='$avatar', user_avatar_type='2' WHERE user_id = '&quot; .
                intval($cookie[0]) . &quot;'&quot;);
            echo &quot;&lt;center&gt;&lt;font class=\&quot;content\&quot;&gt;Avatar for &quot; . $cookie[1] .
                &quot; Saved!&lt;/center&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&quot;;
            echo &quot;&lt;center&gt;Tu nuevo Gravatar :&lt;br&gt;&lt;br&gt;&lt;IMG alt=\&quot;\&quot; src=\&quot;$avatar\&quot;&gt;&lt;br&gt;&lt;br&gt;[ &lt;a href=\&quot;modules.php?name=$module_name&amp;op=edituser\&quot;&gt;Back to Profile&lt;/a&gt; | &lt;a href=\&quot;modules.php?name=$module_name\&quot;&gt;Done&lt;/a&gt; ]&lt;br&gt;&lt;br&gt;&lt;/center&gt;&quot;;
        } else {
        if (preg_match(&quot;#^(http:\/\/[a-z0-9\-]+?\.([a-z0-9\-]+\.)*[a-z]+\/.*?\.(gif|jpg|png)$)#is&quot;,
            $avatar) &amp;&amp; !eregi(&quot;.php&quot;, $avatar) &amp;&amp; !eregi(&quot;.js&quot;, $avatar) &amp;&amp; !eregi(&quot;.cgi&quot;,
            $avatar)) {
            $db-&gt;sql_query(&quot;UPDATE &quot; . $user_prefix . &quot;_users SET user_avatar='$avatar', user_avatar_type='2' WHERE user_id = '&quot; .
                intval($cookie[0]) . &quot;'&quot;);
            echo &quot;&lt;center&gt;&lt;font class=\&quot;content\&quot;&gt;Avatar for &quot; . $cookie[1] .
                &quot; Saved!&lt;/center&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&quot;;
            if (ereg(&quot;(http)&quot;, $avatar)) {
                echo &quot;&lt;center&gt;Your New Avatar:&lt;br&gt;&lt;br&gt;&lt;IMG alt=\&quot;\&quot; src=\&quot;$avatar\&quot;&gt;&lt;br&gt;&lt;br&gt;[ &lt;a href=\&quot;modules.php?name=$module_name&amp;op=edituser\&quot;&gt;Back to Profile&lt;/a&gt; | &lt;a href=\&quot;modules.php?name=$module_name\&quot;&gt;Done&lt;/a&gt; ]&lt;br&gt;&lt;br&gt;&lt;/center&gt;&quot;;
            } elseif ($avatar) {
                echo &quot;&lt;center&gt;Your New Avatar:&lt;br&gt;&lt;br&gt;&lt;IMG alt=\&quot;\&quot; src=\&quot;modules/Forums/images/avatars/$avatar\&quot;&gt;&lt;br&gt;&lt;br&gt;[ &lt;a href=\&quot;modules.php?name=$module_name&amp;op=edituser\&quot;&gt;Back to Profile&lt;/a&gt; | &lt;a href=\&quot;modules.php?name=$module_name\&quot;&gt;Done&lt;/a&gt; ]&lt;br&gt;&lt;br&gt;&lt;/center&gt;&quot;;
            }
        } else {
            echo &quot;&lt;center&gt;&lt;b&gt;Error:&lt;/b&gt; Wrong avatar format! Avatars can only be gif, jpg, or png format.&lt;br /&gt;&quot; .
                _GOBACK . &quot;&lt;/center&gt;&quot;;
        }
    } //End- Uso de Gravatar
        CloseTable();
        include (&quot;footer.php&quot;);
    }
}</pre>
<p>Ahora editemos el archivo usercp_avatar.php ubicado en la carpeta includes, y localiza la función user_avatar_url</p>
<p>Aqui tenemos algunas variantes , les presento la función completa la cual pueden reemplazar sin contratiempos , estoy marcando en negritas los cambios relevantes, agregamos la variable cookie en globales y recuperamos el avatar de gravatar de la misma forma que en Your_Account, cabe mencionar que debido a que Gravatar nos regresa un link incluyendo un archivo .php, no tenemos que filtrarlo y sigue sin ser afectada al funcionalidad actual.</p>
<pre class="brush: php; title: ; notranslate">function user_avatar_url($mode, &amp;$error, &amp;$error_msg, $avatar_filename)
{
 global $lang,$cookie;
#Uso de Gravatar      
    if ((strlen($avatar_filename)==1)&amp;&amp;(strtoupper($avatar_filename)==&quot;G&quot;)){
        $correouser =getemailfromuid(intval($cookie[0]));
        $default = &quot;&quot;; // Optional
        $gravatar = new Gravatar($correouser, $default);
        $gravatar-&gt;size = 80;
        $gravatar-&gt;rating = &quot;G&quot;;
        $gravatar-&gt;border = &quot;FF0000&quot;;
        $avatar_filename = $gravatar-&gt;getSrc();
        $gravatarON = true;     
    } else{
        $gravatarON =false;
    }
#End Uso Gravatar  

 if ( !preg_match('#^(http)|(ftp):\/\/#i', $avatar_filename) )
 {
  $avatar_filename = 'http://' . $avatar_filename;
 }
 
 $avatar_filename = substr($avatar_filename, 0, 100);
    if($gravatarON==false)
      if ( !preg_match(&quot;#^((ht|f)tp://)([^ \?&amp;=\#\&quot;\n\r\t&lt;]*?(\.(jpg|jpeg|gif|png))$)#is&quot;, $avatar_filename) )
    {
        $error = true;
     $error_msg = ( !empty($error_msg) ) ? $error_msg . '&lt;br /&gt;' . $lang['Wrong_remote_avatar_format'] : $lang['Wrong_remote_avatar_format'];
        return;
    }
  
 return ( $mode == 'editprofile' ) ? &quot;, user_avatar = '&quot; . str_replace(&quot;\'&quot;, &quot;''&quot;, $avatar_filename) . &quot;', user_avatar_type = &quot; . USER_AVATAR_REMOTE : '';

}</pre>
<p> </p>
<p>Resumen:</p>
<ul>
<li>Copiamos el archivo classGravatar.php a la carpeta includes</li>
<li>Ubicamos el archivo index.php (modulo Your_Account)</li>
<li>Insertamos el include del archivo classGravatar.php</li>
<li>Insertamos la función getemailfromuid($uid)</li>
<li>Ubicamos la función avatarlinksave($avatar) e incluimos los bloques mencionados</li>
</ul>
<p>Con los cambios descritos, desde el perfil nuke si en lugar de introducir una dirección remota solo escribes una &#8220;G&#8221; el mod recupera la imagen que tengas cargada en Gravatar.php</p>
<p>*OPCIONAL* si desde que tus usuarios se registran quieres que su avatar se cargue automáticamente ubica la función activate() en el index.php del dir Your_Account</p>
<p>Y justo antes del código :</p>
<pre class="brush: php; title: ; notranslate">          $db-&gt;sql_query(&quot;INSERT INTO &quot; . $user_prefix .
                &quot;_users (user_id, username, user_email, user_password, user_avatar, user_avatar_type, user_regdate, user_lang,idstatus) VALUES (NULL, '&quot; .
                $row['username'] . &quot;', '&quot; . $row['user_email'] . &quot;', '$user_password', '$user_avatar', '$user_avatar_type', '&quot; .
                $row['user_regdate'] . &quot;', '$language','$esinvitado')&quot;);
            $result2 = $db-&gt;sql_query(&quot;SELECT user_id FROM &quot; . $user_prefix .
                &quot;_users WHERE username='&quot; . $row['username'] . &quot;'&quot;);
            $row2 = $db-&gt;sql_fetchrow($result2);
            $guserid = intval($row2['user_id']);
  </pre>
<p>Agrega lo siguiente :</p>
<pre class="brush: php; title: ; notranslate">       $default = &quot;&quot;; // Optional
            $gravatar = new Gravatar($row['user_email'], $default);
            $gravatar-&gt;size = 80;
            $gravatar-&gt;rating = &quot;G&quot;;
            $gravatar-&gt;border = &quot;FF0000&quot;;
            $avatar = $gravatar-&gt;getSrc();
            if ($avatar == $default) {
                $user_avatar_type = 3;  
                $user_avatar = &quot;gallery/blank.gif&quot;;
            } else {
                $user_avatar_type = 2;  
                $user_avatar = $avatar;
            }</pre>
<p>El código tiene un pequeño bug pero funciona perfectamente (notan a que me refiero??) bueno se los dejo de tarea.</p>
<p>Si tienes algo que comentar puedes escribir aca : <a title="Foro" href="http://www.clansirwarriors.com/csw/foro-30.html" target="_blank">Foro</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.clansirwarriors.net%2Fimplementar-gravatar-en-php-nuke.html&amp;title=Implementar%20Gravatar%20en%20Php%20Nuke" id="wpa2a_4"><img src="http://www.clansirwarriors.net/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.clansirwarriors.net/implementar-gravatar-en-php-nuke.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  www.clansirwarriors.net/category/programacion/php/feed ) in 1.53575 seconds, on Feb 6th, 2012 at 2:20 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 6th, 2012 at 3:20 am UTC -->
