Wordpress

Como Mejorar la Seguridad de WordPress

WordPress

Normalmente cuando se desarrolla una web en WordPress, la seguridad es algo que no se tiene muy en cuenta pero que cada vez es más necesario cuidarla. Ya sea que estás aquí por curiosidad o porque has vivido las consecuencias de una mala seguridad en tu WordPress, no lo dejes de lado y ten en cuenta cada punto descrito a continuación.

Bloquea el editor de archivos

En nuestro panel de control encontraremos el editor de archivos en Apariencia/Editor de archivos. Desde ahí tendremos acceso a varios de los archivos vitales de nuestra web, como functions.php. Si alguien ha podido acceder a nuestra cuenta de administrador podría hacer mucho daño en estos archivos. Así que, para evitar riesgos, tendría sentido anular este acceso. Para hacerlo podremos añadir el siguiente código en nuestro archivo wp-config.php:

define('DISALLOW_FILE_EDIT', true);

Evita instalación de temas y plugins

Una vez hayamos terminado con el desarrollo de nuestra web es muy probable que no necesitemos instalar nuevos plugins y/o temas. Esta funcionalidad la podemos anular con una simple línea de código sumando así otro poquito en seguridad. Para lograrlo podremos añadir el código siguiente en nuestro wp-config.php:

define('DISALLOW_FILE_MODS', true);

XML-RPC

XML-RPC es una API que realiza llamadas remotas a través de http y el lenguaje de marcado XML. Dicho de una forma sencilla, XML-RPC nos permite interactuar con nuestra web de forma remota, además de ser usado por plugins como Jetpack.

Desde la versión 3.5 de WordPress, XML-RPC viene por defecto y no permite su desinstalación desde el panel de control.

Las conexiones que XML-RPC permite pueden ser aprovechadas para realizar ataques DDoS, por esto puede ser beneficioso eliminar esta funcionalidad.

Existen muchos plugins para eliminar XML-RPC o, incluso solo para protegernos de algunos ataques manteniendo el uso de esta API. Pero si queremos deshabilitarlo mediante código con WordPress será tan sencillo como añadir el siguiente código en nuestro functions.php:

add_filter('xmlrpc_enabled', '__return_false');

Cabeceras de seguridad

Cuando colocamos el dominio de la web en nuestro navegador o hacemos clic en un enlace estamos solicitando datos al servidor donde están alojados. El servidor recibe la llamada y recoge los datos para entregarlos a través de internet. En la respuesta se incluye el texto, las imágenes y funcionalidades de la web correspondiente. Pero también se incluyen otros datos, con información sobre el servidor y algunas configuraciones, que pueden ser de valor para cualquier atacante. Para tratar de evitar esto podemos añadir una serie de cabeceras. Entre ellas encontramos:

  • Strict-Transport-Security: Evita la interacción si no es a través de https
  • Content-Security-Policy: Puede evitar ataques XSS definiendo qué fuentes son permitidas cuando se cargan archivos
  • Permissions-Policy: A través de esta cabecera podremos informar al navegador si se debe permitir el acceso a algunos elementos de hardware como la cámara, el micro, etc. Para este ejemplo se deniega acceso a la cámara y el micrófono
  • X-Frame-Options: Para evitar cargar la página en un iframe externo al dominio
  • X-Content-Type-Options: Esta cabecera previene la carga de archivos que no están correctamente definidos mediante MIME

Antes que incluyas este código debes saber que es posible que cree conflicto con alguna configuración de tu web. Así que se recomienda que solo una persona con conocimientos realice la imlementación y, además, tener garantizado un acceso a través de FTP o el gestor de archivos de tu servidor para modificar el código en caso se rompa la web. Dicho esto, aquí te dejo el código:

function add_security_headers() {
    header( 'X-Frame-Options: SAMEORIGIN' );
    header( 'X-Content-Type-Options: nosniff' );
    header( 'X-XSS-Protection: 1;mode=block' );
    header( "Permissions-Policy: camera 'none', microphone: 'none'" );
    header( 'Strict-Transport-Security: max-age=31536000' );
    header( 'Content-Security-Policy: default-src self' );
}
add_action( 'send_headers', 'add_security_headers' );

Versión de WordPress

Por defecto WordPress nos muestra qué versión se está usando a través de una metaetiqueta llamada “generator”. Esto es información de valor para posibles atacantes. Es por esto que es un plus dejar de mostrar estos datos. Para hacerlo podremos añadir el siguiente código en nuestro functions.php:

remove_action('wp_head', 'wp_generator');

Prefijo en la base de datos

El prefijo por defecto en WordPress es “wp_”, y toda persona con unos mínimos conocimientos en WordPress lo sabrá.

En la base de datos de WordPress se encuentra casi todo el contenido de nuestra web. De hecho también encontraremos datos tan delicados como el nombre de usuario, claves, etc. Puedes hacerte a la idea de lo delicado que puede ser que alguien obtenga acceso ¿no? Así que una práctica no solo recomendable, sino esencial, es modificar este prefijo para complicarle la vida un poquito más a los atacantes malintencionados.

Normalmente podemos modificar este prefijo en el momento de la instalación. En el caso que no lo hayas modificado siempre puedes hacerlo a través del archivo wp-config.php, donde encontraremos una líne de código como la siguiente:

$table_prefix = 'wp_';

Solo tendremos que modificar wp_ por el prefijo que decidamos. Además, es importante que también cambiemos el prefijo de todas las tablas desde PhpMyAdmin, ya que si no lo hacemos nuestra web solo mostrará una pantalla blanca.

Certificado SSL

Un certificado SSL nos permitirá transferir datos cifrados entre nuestro navegador y el servidor donde se encuentra la web. Es lo que permite el acceso a nuestra web a través de https en lugar de http, y además, muestra como un candadito de seguridad junto a la URL en el navegador. Esto también es positivo a nivel SEO.

 

Estos son algunos de las muchas buenas prácticas que puedes poner en práctica si deseas tener un WordPress Seguro, la seguridad informática cada día es mas delicada y proteger nuestra página web es la mejor opción.