En éste tutorial vamos a ver cómo proteger WordPress con htaccess, sin necesidad de usar pesados plugins que ralenticen nuestra web y engorden nuestra base de datos.
Un archivo .htaccess
(hypertext access) es un archivo en formato ASCII popularizado por el Servidor HTTP Apache, que es el más usado en el mundo cuando hablamos de servidores Web. Permite definir diferentes directivas de configuración para cada directorio.
Los archivos .htaccess
se usan, entre otras cosas, para especificar restricciones de seguridad. Y eso es lo que vamos a ver en éste tutorial. Vamos a mejorar muchísimo la seguridad de nuestro WordPress añadiendo unas pocas líneas de código.
Por defecto, un archivo .htaccess
tras una instalación de WordPress está así:
1 2 3 4 5 6 7 8 9 10 |
# BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress |
Pues bien,vamos a ir añadiéndole pequeños trozos de código para proteger nuestro WordPress.
1.Restringimos el acceso al directorio /wp-includes
Éste directorio contiene, esencialmente, el core de WordPress. Nada ni nadie debería tocarlo. Ni nosotros(en la mayoría de los casos), ni un plugin, un theme, etc…
Para hacerlo, pegamos en nuestro .htaccess
el siguiente código:
1 2 3 4 5 6 7 |
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] |
2.Restringimos el acceso al archivo wp-config.php
El archivo wp-config.php contiene, entre otras cosas, los datos de acceso a nuestra base de datos (nombre, usuario, contraseña, etc.)
Lo protegemos añadiendo:
1 2 3 4 |
<Files wp-config.php> Order Allow,Deny Deny from all </Files> |
3.Protegemos el propio .htaccess
¿Quién protege a .htaccess
?. Pues éste código:
1 2 3 |
Order allow,deny Deny from all Satisfy all |
4.Cerramos el acceso a todos los directorios de themes y de plugins.
Vamos a proteger el acceso a todos los directorios de themes y de plugins, es decir, todo lo que esté en los directorios:
wp-content/plugins
wp-content/themes
1 2 3 4 5 6 |
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/ RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L] RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/ RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L] |
5.Bloqueamos en el login, todas las IP´s (menos la nuestra)
Pues eso, si alguien intenta loguearse desde una IP no autorizada, le saldrá un error 403 de acceso prohibido:
1 2 3 |
Order Allow,Deny Deny from all Allow from 127.0.0.1 |
Tendréis que cambiar esa IP por la vuestra, puedes hacer clic aquí para saber cuál es tu IP. Pero cuidado!, tenéis que tener una IP fija para hacer esto.
6. Bloqueamos el acceso a subdirectorios
1 |
Options -Indexes |
7. Bloquear SPAM
1 2 3 4 5 6 |
RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post.php* RewriteCond %{HTTP_REFERER} !.*tu_dominio.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L] |
8. Bloquear IP´s específicas de SPAM
Con éste código bloqueamos IP´s específicas que no estén haciendo SPAM, cambia la IP del ejemplo por la que quieras bloquear:
1 2 3 |
order allow,deny deny from 159.89.156.129 allow from all |
Pues con estos sencillos trozos de código,y sin tener que usar ningún plugin, hemos mejorado muchísimo la seguridad de nuestra web en WordPress.
¿Necesitas más ayuda?Si quieres seguir aprendiendo o necesitas mi ayuda, puedes:
- Contactar para ver cómo puedo ayudarte.
- Suscribirte para no perderte ninguna de mis publicaciones.
- Si quieres comentar, adelante, te responderé encantado.
Muchas gracias por leerme 😉
Hola buenos días,
Podrias indicarme dónde se pegan los códigos? supongo que entre las etiquetas pero lo realizo y no funciona correctamente.
Un saludo
Perdona, Nacho, te respondí antes, pero en relación al post de hoy :-S
Los tienes que copiar y pegar tal cual en el archivo .htaccess que está en la raiz de tu hosting.
Un saludo.
Hola ¿cómo estás? yo use este código para proteger el wp-config y funcionó un poco mejor:
order allow,deny
deny from all
Y, tengo una duda, el código para proteger los themes y los plugins y funciona solo que desapareció el header y al menú se le fue el color así que lo tuve que quitar; ¿no sabes cómo puedo solucionarlo?
Gracias, saludos…
Hola!!!!.
Pues muchas gracias por enviarme tu feedback y mejorar el código 😉
Mmmmm, la verdad es que no sé por qué te está pasando eso. Has hecho más cambios además de el htaccess?. Has probado a proteger themes y plugins por separado para ver cuál está dando el error?.
Ya me dices…
Un saludo!.
Hola.
Creo que tienes que habilitar el acceso a la API de AJAX de WordPress al Wp-admin:
# Permite a los archivos css, js, jpg, jpeg, gif y png de Themes, Widgets o plugins en acceso al archivo admin-ajax.php para poder ejecutar llamadas a la API Ajax de WordPress
Order Allow,Deny
Allow from All
Satisfy Any
Order Allow,Deny
Allow from All
Satisfy Any
Perdón este es el código.
# Permite a los archivos css, js, jpg, jpeg, gif y png de Themes, Widgets o plugins en acceso al archivo admin-ajax.php para poder ejecutar llamadas a la API Ajax de WordPress
Order Allow,Deny
Allow from All
Satisfy Any
Order Allow,Deny
Allow from All
Satisfy Any
Perdón de nuevo, por alguna razón no se muestra correctamente e código en el comentario.
Puedes verlo en : http://infinitopuntocero.com/wordpress-seguro-ii/
Feliz semana.