<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://php.apsique.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Php y otras yerbas - Otra sobre spam en Wordpress - Comentarios</title>
 <link>http://php.apsique.com/contenido/otra_sobre_spam_wordpress</link>
 <description>Comentarios para &quot;Otra sobre spam en Wordpress&quot;</description>
 <language>es</language>
<item>
 <title>Otra sobre spam en Wordpress</title>
 <link>http://php.apsique.com/contenido/otra_sobre_spam_wordpress</link>
 <description>&lt;p&gt;Lamentablemente, el cerebro de los spammers a veces tiene algo que más que agua. Para evitar los filtros por palabras, los muy simpáticos han tomado la talla de enviar entidades de caracter, reemplazando las vocales.&lt;br /&gt;
Me explico. Como todos ustedes han leído el &lt;a href=&#039;xml/&#039;&gt;curso de XML&lt;/a&gt;, no tengo para que explicar que las entidades son una referencia a otro texto. En el &lt;a href=&#039;http://www.freesoft.org/CIE/RFC/1866/11.htm&#039;&gt;estándar HTML&lt;/a&gt;, se define que una entidad con el formato &lt;code&gt;&amp;amp;#[numero]; &lt;/code&gt; debe ser reemplazado por la letra cuyo código sea [numero], dependiendo de la codificación. Por ejemplo, &lt;b&gt;&amp;amp;#111;&lt;/b&gt; es reemplazado por &amp;#111; ( revisen el código fuente, allí podrán darse cuenta.&lt;br /&gt;
Entonces, estos chicos malos ya no envían &#039;poker&#039; en sus mensajes, sino &lt;code&gt;p&amp;amp;#111;k&amp;amp;#101;r&lt;/code&gt;&lt;br /&gt;
La función php que puede hacer decodificar este truco es:&lt;/p&gt;
&lt;pre&gt;
$sArg=preg_replace_callback(&quot;/(&amp;#d+;)/&quot;,
create_function(&#039;$a&#039;,&#039;$l=$a[1];
preg_match(&quot;/&amp;#(d+);/&quot;,$l,$b);
return chr($b[1]);&#039;),$sArg);
&lt;/pre&gt;&lt;p&gt;Siendo  &lt;b&gt;$sArg&lt;/b&gt; el texto a alterar. Por tanto, y si la memoria no falla, aquí tienen la función &lt;b&gt;check_comment&lt;/b&gt; de wp-includes/functions.php actualizada para manejar esto.&lt;/p&gt;
&lt;pre&gt;
function check_comment($author, $email, $url, $comment, $user_ip) {
	if (1 == get_settings(&#039;comment_moderation&#039;)) return false; // If moderation is set to manual
	if (&#039;&#039; == trim( get_settings(&#039;moderation_keys&#039;) ) ) return true; // If moderation keys are empty
	$words = explode(&quot;n&quot;, get_settings(&#039;moderation_keys&#039;) );
	foreach ($words as $word) {
        $word = trim($word);
		if(!strlen($word)) {continue;}
        $pattern = &quot;#$word#i&quot;;
        $aArgs=func_get_args();
        foreach($aArgs as $sArg) {
            $sArg=preg_replace_callback(&quot;/(&amp;#d+;)/&quot;,create_function(&#039;$a&#039;,&#039;$l=$a[1]; preg_match(&quot;/&amp;#(d+);/&quot;,$l,$b);	return chr($b[1]);&#039;),$sArg);
            if (preg_match($pattern,$sArg,$aMatch)) die(&quot;Filtro anti-spam. Palabras prohibidas:&quot;.implode(&#039;,&#039;,$aMatch));
        }
	}
	if ( (count(explode(&#039;http:&#039;, $comment)) - 1) &gt;= get_settings(&#039;comment_max_links&#039;) )
		return false; // Check # of external links
	return true;
}
&lt;/pre&gt;&lt;p&gt;Que tengan un buen día, sin spam! &lt;/p&gt;
</description>
 <comments>http://php.apsique.com/contenido/otra_sobre_spam_wordpress#comments</comments>
 <category domain="http://php.apsique.com/lenguajes/php">PHP</category>
 <pubDate>Sun, 16 Jan 2005 07:27:45 -0800</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">146 at http://php.apsique.com</guid>
</item>
</channel>
</rss>
