Reforzando la seguridad de WordPress — I

Un sistema de gestión de contenidos (en inglés Content Management System o CMS) es una herramienta con la que muchos nos encontramos para subir texto, fotografías o vídeos a un sitio web y nos ayudan a que queden de manera profesional.

La función del CMS es crear y administrar contenido de páginas web de una manera práctica y en la mayoría de los casos, sin necesidad de conocer programación, ya que todo funciona mediante menús y campos a rellenar.

En la actualidad Wordpress en el CMS más utilizado para la mayoría de los sitios web (pueden ver algunas estadísticas aquí). Desde Guayoyo Labs, vamos a compartir algunas recomendaciones para que puedas reforzar la seguridad de tu sitio web en Wordpress.

Aparte del uso de plugins, hay una serie de mejoras que se pueden llevar a cabo en el archivo .htaccess, y que junto con el uso de los plugins adecuados y realizando actualizaciones de forma regular, la seguridad se verá reforzada añadiendo un nivel extra de protección. Ten en cuenta que este archivo es propio del servidor web Apache.

El archivo .htaccess típico que por defecto viene en cualquier instalación de WordPress es:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Cualquier otra configuración deberá ir después de las palabras #END Wordpress.

1.- Restringir Inicios de Sesión a un Rango de IPs

Si utilizas Apache 2.2

# Bloquear inicio de sesión en Apache 2.2
<files /wp-login.php>
order deny,allow
allow from miIP
allow from miIP
deny from all
</files>

Si utilizas Apache 2.4

# Bloquear inicio de sesión en Apache 2.4
<Files "wp-login.php">
Require all denied
</Files>

2.- Restringir Inicios de Sesión a un Rango de IP

Si utilizas Apache 2.2

# Proteger wp-config en Apache 2.2
<files wp-config.php>
order allow,deny
deny from all
</files>

Si utilizas Apache 2.4

# Proteger wp-config en Apache 2.4
<Files "wp-config.php">
Require all denied
Require ip miIP
</Files>

3.- Protege tu archivo .htaccess

Si utilizas Apache 2.2

# Protege .htaccess en Apache 2.2
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow, deny
deny from all
satisfy all
</files>

Si utilizas Apache 2.4

# Protege .htaccess en Apache 2.4
<FilesMatch "^.*\.([Hh][Tt][Aa])">
Require all denied
</FilesMatch>

4.- Previene la navegación de directorios

# Previene listado de directorios
Options All -Indexes

5.- Previene el Hotlinking a tus imágenes

# Previene hotlinking de imágenes
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} \
!^http://(www\.)example.com/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|bmp|png)$ - [NC,F,L]

6.- Bloqueas los incluides

# Bloquea los Includes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php \
- [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

7.- Prevenir puerta trasera en PHP

# Protección contra backdoors en Apache 2.2
<Files *.php>
deny from all
</Files>
# Protección contra backdoors en Apache 2.4
<FilesMatch ".+\.php$">
Require all denied
</FilesMatch>

8.- Prevenir SPAM en los comentarios

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post.php*
RewriteCond %{HTTP_REFERER} !.*tudominio.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]

En el próximo artículo, estaremos hablando sobre algunos plugins de seguridad para seguir reforzando la seguridad de nuestro wordpress.