Otra sobre spam en Wordpress

Enviado por admin el Dom, 16/01/2005 - 11:27.
Clasificado en:

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.
Me explico. Como todos ustedes han leído el curso de XML, no tengo para que explicar que las entidades son una referencia a otro texto. En el estándar HTML, se define que una entidad con el formato &#[numero]; debe ser reemplazado por la letra cuyo código sea [numero], dependiendo de la codificación. Por ejemplo, o es reemplazado por o ( revisen el código fuente, allí podrán darse cuenta.
Entonces, estos chicos malos ya no envían 'poker' en sus mensajes, sino poker
La función php que puede hacer decodificar este truco es:

$sArg=preg_replace_callback("/(&#d+;)/",
create_function('$a','$l=$a[1];
preg_match("/&#(d+);/",$l,$b);
return chr($b[1]);'),$sArg);

Siendo $sArg el texto a alterar. Por tanto, y si la memoria no falla, aquí tienen la función check_comment de wp-includes/functions.php actualizada para manejar esto.

function check_comment($author, $email, $url, $comment, $user_ip) {
	if (1 == get_settings('comment_moderation')) return false; // If moderation is set to manual
	if ('' == trim( get_settings('moderation_keys') ) ) return true; // If moderation keys are empty
	$words = explode("n", get_settings('moderation_keys') );
	foreach ($words as $word) {
        $word = trim($word);
		if(!strlen($word)) {continue;}
        $pattern = "#$word#i";
        $aArgs=func_get_args();
        foreach($aArgs as $sArg) {
            $sArg=preg_replace_callback("/(&#d+;)/",create_function('$a','$l=$a[1]; preg_match("/&#(d+);/",$l,$b);	return chr($b[1]);'),$sArg);
            if (preg_match($pattern,$sArg,$aMatch)) die("Filtro anti-spam. Palabras prohibidas:".implode(',',$aMatch));
        }
	}
	if ( (count(explode('http:', $comment)) - 1) >= get_settings('comment_max_links') )
		return false; // Check # of external links
	return true;
}

Que tengan un buen día, sin spam!

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato