Asegurar WordPress

Asegurar WordPress y protegerlo de los ataques de hackers.

A CMS is only as secure as its weakest link. This article provides a best practice for securing WordPress. It does not claim to be exhaustive. It is intended for our customers to raise awareness of the security issues with WordPress.

WordPress is a multifunctional content management system that offers web designers a vast array of possibilities. Because getting started with WordPress is so easy, and because WordPress is sometimes pre-installed, it has a very high market share. Its widespread use, along with many WordPress systems that are not professionally secured, makes it an attractive target for hackers.

Topics

  • Update WordPress
  • Secure Hosting
  • Configure Web Server
  • Set File System Permissions
  • Secure the Database
  • Use Secure Passwords
  • SSL Encryption
  • Salts
  • Directory Browsing
  • Prevent Access to Backend Login via Password Protection
  • Rename the WordPress Backend Login

Update WordPress

WordPress regularly receives updates for the core and installed extensions. Minor versions are updated automatically. It’s a good idea to check if the latest version is installed. In the past, there have been issues with the update process. For example, an update to the minor version WordPress 4.9.3 was automatically applied, which had a bug that prevented further automatic updates.
Trust is good, but control is better!

Themes and Plugins

Third-party themes and plugins should be updated.
Always exercise special caution when using third-party extensions.

Prevent Direct Access to wp-config.php

The web server can be configured to categorically block access to the wp-config.php file.

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

Derechos de usuario

El archivo wp-config.php contiene, entre otras cosas, las credenciales de la base de datos. Se recomienda ajustar los derechos de usuario para wp-config.php.
Después de la instalación de WordPress, wp-config.php generalmente tiene los derechos de usuario predeterminados 644. Esto es generalmente suficiente, pero ciertamente no tan seguro como podría ser.

cd ~/www/<dir>
chmod 400 wp-config.php

Salts

Por defecto, WordPress admite el uso de cadenas únicas (salts).
Los salts se almacenan en la base de datos por defecto. El archivo wp-config.php está preparado para almacenar salts generados individualmente.

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

Mark Jaquith afirma (en esencia) que, aunque las razones para establecer los salts en el archivo wp-config.php no son obvias, este paso es bastante sensato. Justifica su afirmación con un división de riesgos. Si un atacante obtiene acceso de lectura a la base de datos, no podrá autenticar con éxito solo con las contraseñas almacenadas allí, porque se necesitan salts, que ya no están en la base de datos. Para crear una cookie de inicio de sesión, se requiere acceso tanto a la base de datos como al sistema de archivos, lo que dificulta enormemente un hackeo.

Mark Jaquith utiliza una metáfora para esto:

Si tu casa tuviera dos cerraduras de seguridad en la puerta principal, no pondrías ambas llaves debajo de la misma piedra. (Comentario de Mark Jaquith en vaultpress.com, 24.03.17)

Generar nuevos salts

¿Qué archivos y directorios son especialmente críticos con respecto a los derechos de usuario?

Estos son, por supuesto, archivos de configuración que contienen hashes y contraseñas, como el archivo wp-config.php o el directorio upload/.

Plugins de seguridad

Revise las calificaciones y la cantidad de instalaciones antes de instalar un plugin. Un plugin malo puede simplemente empeorar las cosas.

Al instalar un plugin, asegúrese de comprobar cuántas instalaciones activas existen y qué tan activamente mantiene el desarrollador el plugin, lo cual se puede ver en los registros de cambios y la compatibilidad con la versión actual de WordPress.

Login Lockdown

Con el plugin gratuito “Login Lockdown”, puede evitar que el intruso ingrese la contraseña múltiples veces.
El intruso será bloqueado después de un número configurable de intentos.

Evitar el acceso al inicio de sesión de WordPress

El área de inicio de sesión de WordPress se puede proteger con una protección de directorio.

La navegación de directorios permite la visualización de archivos en un directorio web si no hay una página de índice presente. Esta función a menudo ya está deshabilitada. No está de más comprobar esto.

Ocultar el área de inicio de sesión del backend

El área de inicio de sesión se puede reescribir mediante una redirección. El acceso al directorio anterior wp-admin/ mostrará una página de error HTTP 404. También hay plugins disponibles para esto.

Evitar la ejecutabilidad en el directorio de cargas

Si un intruso logra acceder al directorio uploads/, podría utilizar cualquier código cargado, como un archivo php, para acceder a otras áreas. El siguiente código impide que el servidor web (Apache) ejecute archivos .php en el directorio uploads/.

<FilesMatch "\.(php|phtml|php3|php4|php5|pl|py|jsp|asp|html|htm|shtml|sh|cgi|suspected)$">
    deny from all
</FilesMatch>