Después de ver muchas guías para hacer WordPress más seguro, analizar mis webs con muchas herramientas, y haber utilizado muchos módulos de seguridad, estoy empezando a utilizar unos archivos mínimos para hacer que WordPress sea más seguro.
Este código lo vamos a meter en nuestro archivo principal .htaccess, nos protege el archivo wp-config.php, el propio .htaccess, evita spam de comentarios y que nos hagan hotlinking.
IMPORTANTE: reemplazar en el código dominio.com por vuestro dominio.
<files wp-config.php>
order allow,deny
deny from all
</files>
<Files .htaccess>
order allow,deny
deny from all
</Files>
#hotlinking
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?dominio.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
#spam comments
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post.php*
RewriteCond %{HTTP_REFERER} !.*dominio.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http(s)?://%{REMOTE_ADDR}/$ [R=301,L]
Este código lo tendremos que meter en el archivo functions.php de nuestra plantilla.
add_action( 'send_headers', 'add_header_seguridad' );
function add_header_seguridad() {
header( 'X-Content-Type-Options: nosniff' );
header( 'X-Frame-Options: SAMEORIGIN' );
header( 'X-XSS-Protection: 1;mode=block' );
}
Finalmente, crearemos un htaccess adicional en la carpeta /wp-content/uploads/ para permitir únicamente la ejecución de archivos multimedia, nada de ejecutar archivos PHP. Podemos o bien permitir únicamente ciertos formatos de archivo.
<FilesMatch "(?i)\.(jpg|jpeg|jpe|gif|png|bmp|tif|tiff|doc|pdf|rtf|xls|numbers|odt|pages|key|zip|rar|webp|mp3|mp4|svg)$">
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order Allow,Deny
Allow from all
</IfModule>
</FilesMatch>
O bien bloquear los archivos .php y otros posibles de ataques.
<FilesMatch "(?i)\.(php|phtml|php3|php4|php5|pl|py|jsp|asp|html|htm|shtml|sh|cgi|js|suspected)$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order Deny,Allow
Deny from all
</IfModule>
</FilesMatch>