Aspectos de seguridad en WordPress (4/4)

Este capítulo trata sobre la revelación de la ruta de instalación de WordPress y a evitar los Script Injections (conocido también como XSS).

Revelación de la ruta de instalación de WordPress 

Esta es otra vulnerabilidad aun no solucionada en la ultima versión (3.3) la cual permite  obtener la ruta completa de instalación (path disclosure) en el servidor mediante un mensaje de error que generan los scripts en PHP. Es posible obtener dónde se encuentra instalado WordPress dentro de la estructura de directorios llamando directamente al script “wp-settings.php”. Por ejemplo tipeamos lo siguiente en la barra de dirección del explorador,

http://www.nombre_blog.algo/wp-settings.php/

El mensaje  obtenido se puede ver en la siguiente imagen en donde se muestran las rutas dentro del file system del servidor.

Para evistar esta vulnerabilidad hay dos formas:

  • Editando el archivo “php.ini“, generalmente localizado en el raíz de la instalación de WordPress. Si no en el directorio “/etc/” en nuestro servidor, usando alguna distro de linux. Le añadimos la linea “display_errors = off“.
  • Editando el archivo “wp-config.php” y añadiento las siguientes lineas: 

error_reporting(0);
@ini_set(‘display_errors’, 0);

Donde la primera linea indica el nivel de error_reporting queremos. Para mas detalles podemos ver el manual de errores PHP.

La segunda linea ejecuta la funion “ini_set” la cual modifica el valor para “display_errors” y lo setea a “0” (lo cual lo deshabilita). “display_errors” le dice a PHP que errores deben ser mostrados en la pagina. Si lo seteamos a “1” mostrara todos los errores. La razón por la cual se antepone “@” es para los warnings (advertencias) de la funcion “ini_set”.

La modificación de la configuración PHP de nuestra cuenta a veces depende de proveedor de hosting que tengamos.

 Script Injections

Es el más fácil y rápido de efectuar. A parte en cuanto sale una nueva version de WordPress ya hay quien esta intentando sacar exploits y vulnerabilidades de cada versión para atacar a los usuarios de WordPress.

Para hacer frente a script injections, vamos a evitarlo metiendo una expresiones regulares con directivas de Apache en el archivo .htaccess que he mencionado anteriormente en otros artículos. Vamos a agregarle las siguientes líneas:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (< |%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

Ahora que me encuentro hablando sobre este archivo hay otra cosa que le podemos agregar para proteger nuestro archivo de configuración “wp-config.php“, sin duda unos de los mas importantes para mostrar datos de la conección a nuestra base de datos e incluso los datos de conexión por ftp para que se realicen las actualizaciones automáticas.

Al contener todo este tipo de información crítica hay que prevenir todo lo que se pueda. En diciembre del año pasado casi sufro un ataque de este tipo (¬¬). Para ello vamos a evitar que cualquier persona pueda tener acceso al mismo empleando directivas de Apache.  Nuevamente agregamos las siguientes lineas al archivo .htaccess:

<files wp-config.php>
order allow,deny
deny from all
</files>

Si me he equivocado en algo de lo expuesto comenten. Recordemos la siguiente frase “La verdad os hará libres y la mentira….creyentes”, por eso la verdad y el conocimiento ante todo!, salvo que se quiera vivir en una realidad plagada de espejismos de colores de forma consciente, pues somos libres de elegir¿ no? 😉