Como limpiar una inyección de código en javascript haciendo uso de PHP
En ciertas ocasiones, tenemos la mala fortuna de encontrarno que nuestra web fue bloqueada debido a que su código fue manipulado por un tercero. Esta práctica es conocida como inyección de código y nos causa un gran dolor de cabeza.
Todo archivo de texto en nuestra servidor puede ser infectado, existiendo inyecciones de código en javascript (Js), Html, Php, entre otras. Es relativamente fácil identificar el tipo de archivo infectado, pero por las circustancias puede ser complejo eliminar el script de toda la web.
Por ejemplo, hace unas semanas realicé la limpieza de un sitio web desarrollado en Joomla. En un prinicipio inicié haciendo la tarea de manera manual, pero esta tarea se hace realmente repetitiva y aburridora luego de 20 archivos limpiados. Por lo cual desarrolle un script en php que realizara esta tediosa tarea.
El primer paso para eliminar la inyección del código es saber que codigo inyectaron y que tipo de archvio fueron modificados. por lo general todos los archivos de una misma extensión están infectados.
Por ejemplo, hagamos la suposición que el codigo inyectado es ";document.write('Hola Mundo');" y que fueron infectados todos nuestros archivos de extensión JS, por lo cual tendremos que recorrer recursivamente los directorios del sitio.
El siguiente script hay que modificarlo según las necesidades.
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html>
<head>
<meta name="tipo_contenido" content="text/html;" http-equiv="content-type" charset="utf-8">
</head>
<body>
<?php
function limpiar($archivo){
$fichero_texto = fopen ($archivo, "r");
$contenido = fread($fichero_texto, filesize($archivo));
fclose ($fichero_texto);
/*En res ponemos el codigo que queremos eliminar*/
$res = str_replace(";document.write("Hola Mundo");" ,'', $contenido,$count);
if($count > 0){
echo "... Infectado<br/>";
$fp = fopen ($archivo, "w");
fwrite( $fp,$res);
fclose ($fp);
}else
echo "... Limpio<br/>";
}
function extension($archivo){
$ext=explode(".",$archivo);
$num=count($ext)-1;
return trim($ext[$num]);
}
function scanDirFiles($dir){
$directorio=opendir($dir);
while ($archivo = readdir($directorio)){
if($archivo != '.' && $archivo != '..'){
if(is_dir("$dir/$archivo")){
$newDir = "$dir/$archivo";
scanDirFiles($newDir);
/*Aqui cambiamos la extension del archivo que queremos examinar*/
}else if(extension($archivo) == 'js'){
echo "Limpiar: $dir/$archivo ";
limpiar("$dir/$archivo");
}
}
}
closedir($directorio);
}
$path = dirname(__FILE__);
echo "<b> Directorio: $path </b><br/>";
scanDirFiles($path);
?>
</body>
</html>
Es importante que cambiemos las credenciales de autenticacion de todo el sitio, lo que incluye los datos de ftp y gestor de contenido(Joomla, Wordpress, Etc)
Aunque el título facilmente podría ser el nombre de un capítulo de The Big Bang Theory, no es así. Ya hablamos en el artículo la historia de linux, el debate que se g