Cambios para mejorar la seguridad de WordPress

Categorias: cPanel, Tutoriales

La seguridad en WordPress es un aspecto que como administradores de nuestro sitio web tenemos que llevar al día. Actualizaciones, contraseñas seguras, plugins que organicen nuestro sistema… son unos de los pasos que podemos dar para afianzar la seguridad de nuestro gestor de contenidos. Pero no son los únicos. A nivel de código y estructura de ficheros, podemos realizar una serie de cambios para mejorar la seguridad de WordPress y que suponen una serie de introducciones en líneas de código sencillas y aplicable a la mayoría de nuestros hostings.

Como primer paso, haremos lo que siempre recomendamos: copia de seguridad, tanto de nuestro equipo como de nuestra base de datos. Así nos sentimos más libres de realizar cambios en nuestro sitio sin el riesgo de perder todo el contenido.

imagen wordpress

¿Qué cambios puedo realizar?

Mover la carpeta wp-content: sacar la carpeta de nuestros archivos en una ruta no común, hará que scripts maliciosos configurados para sitios por defecto no lleguen a afectar a nuestro sitio. Hay que tener en cuenta que esto es aplicable a planes simples, de dominio y alojamiento: en planes CloudPro, aparcados, … podría generar errores o incluso que la carpeta de una página machacara la de otra, cargándose así todo el contenido. Los pasos serían:

Cambiar la ubicación del fichero wp-config.php: hay que moverlo a la carpeta superior donde tenemos instalado nuestro WordPress. Es decir, si está en

…/public_html/wordpress/wp-config.php

Lo cambiaríamos a:

…/public_html/wp-config.php

Después, cambiaríamos de ubicación la carpeta wp-content. Paso a paso:

Movemos la carpeta wp-content a la ruta que queramos de nuestro alojamiento.

Editamos el fichero wp-config.php para añadirle la siguiente nueva línea al final del documento:

/** Sets up WordPress vars and included files. */
define( ‘WP_CONTENT_DIR’, $_SERVER[‘DOCUMENT_ROOT’] . ‘/wp/wp-content’
);
#indicamos el directorio wp-cont en /wp/wp-content
define( ‘WP_CONTENT_URL’, ‘http://www.dominio.com/wp/wp-content’
);
#indicamos la ruta a wp-content con el dominio
require_once(ABSPATH .
‘wp-settings.php’);
#la ruta viene por defecto

Si en lugar de mover todo el wp-content quisiéramos mover únicamente la carpeta de plugins, seguiríamos los pasos anteriores con la carpeta plugins y en el wp-config.php añadiríamos la siguiente línea al final del documento:

define( ‘WP_PLUGIN_DIR’, $_SERVER[‘DOCUMENT_ROOT’] .
‘/blog/content/wp-content/plugins’ );
#donde blog/content/wp-content/plugin es la ruta donde se encuentran nuestra carpeta plugins
define( ‘WP_PLUGIN_URL’, ‘http://example/blog/content/wp-content/plugins’);
#donde http://example/blog/content/wp-content/plugins es la ruta web donde se encuenta nuestra carpeta plugins
define( ‘PLUGINDIR’, $_SERVER[‘DOCUMENT_ROOT’] .
‘/blog/content/wp-content/plugins’ );
#donde blog/content/wp-content/plugin es la ruta donde se encuentran nuestra carpeta plugins

Otra opción a mover el fichero wp-content.php a una carpeta superior es pasar los datos de conexión a la base de datos a un nuevo fichero y colocarlo con el nombre que queramos en la ruta que queramos, que en este ejemplo sería config.php:

Creamos un fichero de configuración de acceso a la base de datos en, por ejemplo:

/home/usuario/public_html/wp/config.php

Los datos a introducir en este fichero se encuentran en el wp-config.php. Copiamos las siguientes líneas de nuestro fichero:

Guardamos este nuevo fichero y sustituimos estos datos que recientemente acabamos de copiar del fichero wp-config.php con los siguientes:

<?php

define(‘DB_NAME’, ‘xxxxxxxx_xxxxx’);

define(‘DB_USER’, ‘xxxxxxxx_xxxxx’);

define(‘DB_PASSWORD’, ‘xxxxxxxxxx’);

/** MySQL hostname */

define(‘DB_HOST’, ‘localhost’);

/** Database Charset to use in creating database tables. */

define(‘DB_CHARSET’, ‘utf8’);

/** The Database Collate type. Don’t change this if in doubt. */

define(‘DB_COLLATE’, »);

define(‘AUTH_KEY’, ‘xxxxxxxxxx’);

define(‘SECURE_AUTH_KEY’, ‘xxxxxxxxxxx’);

define(‘LOGGED_IN_KEY’, ‘xxxxxxxxxxx’);

define(‘NONCE_KEY’, ‘xxxxxxxxxxx’);

define(‘AUTH_SALT’, ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’);

define(‘SECURE_AUTH_SALT’, ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’);

define(‘LOGGED_IN_SALT’,

‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’);

define(‘NONCE_SALT’, ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxx’);

/**

* WordPress Database Table prefix.

*

* You can have multiple installations in one database if you give each

a unique

* prefix. Only numbers, letters, and underscores please!

*/

$table_prefix = ‘wp_’;

?>

Guardamos este nuevo fichero y sustituimos estos datos que recientemente acabamos de copiar del fichero wp-config.php con los siguientes:

<?php

include(‘/home/usuario/public_html/wp/config.php’);

#donde /home/usuario/public_html/wp/config.php sería la ruta donde hemos establecido el fichero config.php

?>

Guardamos el fichero y todo debe seguir funcionando sin problema. Tenemos que tener en cuenta que los campos variarán dependiendo de nuestro usuario/hosting/base de datos… así que no copies y pegues lo que aquí arriba citamos, que te sirva de guía para copiar lo que tienes configurado en tu propio hosting.

Otros cambios más sencillos que podemos realizar son:

Eliminar el fichero readme.html: este fichero que trae por defecto la instalación de WordPress da información de nuestro sitio a los visitantes, informando incluso de la versión de nuestro gestor de contenidos. Recomendamos eliminarlo, así como los ficheros licencia.txt y license.txt.

Eliminar el listado de directorios: para desindexar nuestro sitio, accedemos a nuestro cPanel, sección Herramientas avanzadas > Index Manager.

imagen wordpress

Seleccionamos public_html, haciendo click en el nombre de la carpeta. Elegimos después la opción “No indexar” y hacemos click en guardar.

imagen wordpress

Esto añade Options -Indexes al final del .htaccess del public_html

Con estos pasos podemos blindar un poco más si cabe nuestro WordPress y evitar los molestos ataques maliciosos a nuestra página y evitar que sea listada por los grandes ISP’s.