Al ser WordPress el rey de los CMS en la web es también el mas atacado, por esto debemos ser muy cuidadosos a la hora de lanzar nuestra instalación a la web sin ningún tipo de seguridad.
Según las ultimas estadísticas de seguridad de WordPress, el 41% de los problemas de seguridad son causados por el proveedor de alojamiento que tenemos contratado, seguido de los Temas y los Plugins, muy raras veces tiene que ver con el núcleo de nuestro WordPress, a continuación mostraremos un gráfico en el cual ampliamos mas esta información.
Existen muchas formas de proteger nuestra instalación de WordPress contra ataques, ahora recomendaremos alguna de las mas importantes las cuales “DEBES” siempre tener en cuenta en toda instalación.
Mantén tu instalación de WordPress al día.
La regla numero 1 es tener siempre nuestro WordPress actualizado ya que los desarrolladores de WordPress trabajan día a día en la búsqueda de nuevos bugs y en la corrección de estos, cada nueva actualización nos hace mas seguros contra hackeos.
Para esto una buena practica es tener activadas por lo menos las actualizaciones automatizadas de menores, con lo que nuestro WordPress se actualizara de manera automática.
Para activar nuestras actualizaciones automáticas basta con agregar estas líneas de código a nuestro archivo wp-config.php.
# Habilitar todas las actualizaciones básicas, incluyendo menores y mayores: define( 'WP_AUTO_UPDATE_CORE', true ); # Habilitar actualizaciones fundamentales para versiones menores (por defecto): define( 'WP_AUTO_UPDATE_CORE', 'minor' );
Ocultar la versión de nuestro WordPress
La versión de nuestro WordPress se muestra en el código fuente de nuestra página como una etiqueta meta, esta es importante ocultarla ya que en la red cada botnet está rastreando las páginas web y podemos hacerle mas fácil la labor de hackearnos si le mostramos cual es la versión de nuestra instalación y mucho mas si la tenemos desactualizada.
Podemos ocultar la versión de nuestro WordPress agregando la siguiente línea a nuestro archivo functions.php.
Remove_action('wp_head', 'wp_generator');
Cambiar el prefijo de las tablas en la bases de datos
Por defecto en cada instalación, WordPress nos coloca un prefijo a las tablas de nuestra base de datos “wp_”, esto es importante cambiarlo ya que es el mas conocido por los atacantes y será el primero que intentaran utilizar en cada ataque.
/** Prefijo de las tablas de la base de datos, cambiarlas siempre en lo posible por seguridad */ $table_prefix = 'ax2343_'; //Sólo números, letras y guiones bajos por favor!
Si deseas cambiar este prefijo luego ha hacer tu instalación, te recomiendo el siguiente plugin iThemes Security (formerly Better WP Security).
Las ocho claves de seguridad
Dentro de nuestro archivo wp-config.php también es necesario cambiar las llaves de seguridad que nos brindan por defecto, estas las podemos generar desde aquí, estas llaves se asignas a diferentes Cookies y son utilizadas en diversos lugares de la instalación para incrementar la seguridad.
define('AUTH_KEY', '+z!&v79UL%0%vaL-{70e$w73Qonf-ftffH$+-VFI,w +n}-E#E,O-Pou-:68H8G{'); define('SECURE_AUTH_KEY', ')OlW6a1b6s<0Dpfe7,Ax:4QhLC!6-G_@Aca*bPj*3Kw.og/.g84tUvQzy*a_#Mth'); define('LOGGED_IN_KEY', 'n(0Q`g2c+fa!1Em$1INPKLo)@_@RDchViqPC:F5++)9N&ipaii+3-|?Oa6T,YqR0'); define('NONCE_KEY', 'IHo3:VNltSktCNU#R-P<Y/HG5m-4![fDlkS| QNq5-17p4snv9{>NP?^CuPd*K--'); define('AUTH_SALT', '*5hpD~L<a0fs>CT,ifB.gzXNknu+dZNAsZ*1cmYktIYBT8`:.IS^!%=yJLM2~EB+'); define('SECURE_AUTH_SALT', '(x6r)*UvE(`|^R)VZBGQ!bIT!ExH^]hla+jq/ b4(QI=eArO!5fl_.RxyS.,8j:Z'); define('LOGGED_IN_SALT', 'X5:~uQ^OCm!O,x$91KN<vNhf,f0%(M0EY7g.szawX*h;TwJ<a hfRokcNZ]c4_.l'); define('NONCE_SALT', 'bhbeMZreSTP,b0f+-9I]ja4C>R=/QT8Bn|P@Q=@}p~IKL(pd-eA/qT`SZ~b;cP_F');
Reubicar el archivo de configuración wp-config.php
Reubicar el archivo wp-config.php que se encuentra en la raíz de nuestra instalación WordPress es muy importante ya que contiene toda la información de conexión a nuestra base de datos y en caso de que PHP deje de funcionar en nuestro servidor web este se puede mostrar como un archivo de texto plano y podría revelar nuestros datos.
En algunos servidores esto no es posible realizar esto, pero podemos ocultarlo por medio de nuestro .htaccess.
# protege archivo wp-config <files wp-config.php> order allow,deny deny from all </files>
Proteger el archivo .htaccess
El archivo .htaccess el cual se encuentra en la raíz de nuestra instalación, permite controlar los enlaces permanentes de nuestro sitio web, pero también puede controlar mucha de la configuración de PHP, importante protegerlo también.
# protege archivo .htaccess <files .htaccess> order allow,deny deny from all </files>
Mas información sobre el archivo .htaccess en WordPress.
Deshabilitar la navegación entre directorios
No queremos que nadie intente acceder por ejemplo a nuestro directorio http://mipagina.com/wp-content, para evitar navegación entre nuestros directorios y que puedan revisar nuestra información, es importante deshabilitar esto en el archivo .htaccess
# deshabilita navegación por directorios Options All –Indexes
Reubicar el directorio de nuestro contenido
El directorio /wp-content/ contiene todo lo que le agregamos a nuestra web, plugins, imágenes, documentos, etc, al cambiarlo de su ubicación por defecto estamos evitando ser encontrados por los atacantes.
Es importante destacar que esta opción de reubicar viene dada desde la versión 2.6 de WordPress.
Para realizar esto debe de editar su archivo wp-config.php
/** Permite mover el directorio wp-content **/ define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/blog/wp-content' ); define( 'WP_CONTENT_URL', 'http://example/blog/wp-content' );
Es posible que algunos plugins no tengan compatibilidad con esta característica con lo que también deberíamos cambiar la ubicación del directorio plugins:
/** Mover el directorio plugin **/ define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/blog/wp-content/plugins' ); define( 'WP_PLUGIN_URL', 'http://example/blog/wp-content/plugins' );
Utilizar SSL para el inicio de sesión y la administración
La mayoría de los servidores hoy en día traen soporte para SSL (Secure Socket Layer), lo que permitirá tener una conexión mucho mas segura, seguramente al utilizar esto verán que su protocolo cambiara a HTTPS. Antes de hacer esta configuración les recomiendo investigar mucho y no tomar esta decisión a la ligera.
Para activar este modo tanto para el inicio de sesión como para la administración, agreguen estas líneas a su wp-config.php.
define( 'FORCE_SSL_ADMIN', true ); //Forzar inicio de sesión seguro a la administración. define( 'FORCE_SSL_LOGIN', true ); //Forzar inicio de sesión seguro.
Nunca tener un usuario de nombre admin
Dejar un nombre de usuario como el admin siempre da pie para que algún malintencionado intente acceder a nuestra página, puedes hacer este cambio ingresando a la base de datos o también lo puedes hacer por medio de este plugin que te recomiendo iThemes Security (formerly Better WP Security)
Permisos de Apache
Los permisos varían en función de su configuración pero una norma habitual consiste en establecer los archivos en 644 y las carpetas en 755 todo esto varia mucho dependiendo del servidor en el cual este alojada, estos cambios seguramente afecten alguna función, como las actualizaciones de un clic y la instalación de plugins y temas desde el panel de control, si esto llegase a suceder tendrá que ofrecerle a su WordPress las credenciales FTP de su sitio para recuperar dichas funciones.
WordPress también cuenta con unas funciones que nos permiten dejar por defecto estos permisos a los archivos y carpetas, puedes agregar esto a tu wp-config.php para que tomen los permisos recomendados.
/** Remplaza los permisos de archivos predeterminados en WordPress **/ define ('FS_CHMOD_DIR', (0755 & ~ umask ())); define ('FS_CHMOD_FILE', (0644 & ~ umask ()));
Si deseas saber un poco mas de permisos para los ficheros de Wordpress te remito al Codex para que entiendas un poco mas.
Copias de seguridad
Nadie en la web esta exento de que pueda llegar a perder información, por esto siempre es necesario tener backup de nuestras bases de datos y nuestros archivos, por lo menos realizarla cada mes o cada cuanto hagas una actualización importante, te recomiendo estos plugins para hacer backup: BackUpWordPress , iThemes Security (formerly Better WP Security).
Bloquear el uso de nuestra imágenes o contenido de nuestra web (hotlinks)
Es posible que alguien quiera hacer uso de nuestro contenido web imágenes, iconos, etc por medio de enlaces de nuestro sitio web causando uso de nuestro ancho de banda, también podemos evitar esto por medio de nuestro .htaccess
# Protección frente a hotlinks de archivos .jpg, .jpeg, .jpe, .gif, .png <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$ [NC] RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?domain\. [NC] RewriteRule \.(gif|jpe?g?|png)$ - [F,NC,L] </ifModule>
Acá podemos encontrar mas información de cómo hacer nuestros propios códigos de protección: Perishable Press
Bloquear el mensaje de error en la entrada al administrador
Lo que hará esto será ocultarnos los mensajes de error en el momento que nos equivoquemos al acceder a nuestra administración, permitiendo no dejar rastro de si hubo error en el usuario o password.
Agregamos esta línea a nuestro archivo functions.php de nuestro tema.
add_filter('login_errors',create_function('$a', "return null;"));
Para los que no les gusta mucho utilizar código y entrar a modificar estos archivos, les recomiendo un excelente plugin, se llama iThemes Security (formerly Better WP Security), anteriormente se llamaba Better Security.
Este plugin es uno de los mejores con mas de 4 millones de descargas en el repositorio de WordPress, realizado por la empresa ithemes la cual se dedica a la creación de temas y plugins de mucha calidad, con este plugin se pueden hacer la mayoría de modificaciones que mostré anteriormente y lo mejor sin tocar una sola línea de código.
Existen 2 versiones, una gratuita la cual funciona muy bien y de la cual no me quejo, pero si quieres características adicionales como autenticación de 2 factores, Escaneo de malware, Comparación de archivos en línea, y otras características mas te recomiendo la versión Pro.
Si conoces mas recomendaciones para proteger sitios web en WordPress deja tus comentarios al final.