Hace tiempo que ando un poco cansado de plugins y mas plugins , en este caso, he visto como algun plugin de seguridad, realmente el 60% del trabajo lo realiza sobre el fichero htaccess, asi que me he decidido entre otras cosas a crear un fichero base en el que no necesite instalar ningun monstruito, esto no quiere decir que no vaya a usar plugins de seguridad sino que voy a usar algunos mas livianos algunos por descubrir aun y ademas al htaccess le voy a añadir opciones de compresión , cache y varias cosillas mas.
Este fichero 😛 lo podeis usar bajo vuestra responsabilidad jajaja. A mi no me llameis para decirme que os habeis cargado el WordPress.
Ire añadiendo poco a poco y comentando las lineas que se van añadienod y para que, aunque al final dejare un fichero completo. Y me viene bien a mi para tener el mio y acordarme de por que hacia las cosas.
He querido dejar las lineas de los plugins que me las han ido escribiendo, para que os hagais una idea.
General
Url Bonitas
Esta opcion la pone por defecto WordPress al poner tus urls, no hace falta que las añadas
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
Mejora de la Velocidad
Cache
# BEGIN Cache <FilesMatch "\.(?i:ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|x-html|css|xml|js|woff|woff2|ttf|svg|eot)(\.gz)?$"> <IfModule mod_expires.c> ExpiresActive On ExpiresDefault A0 ExpiresByType image/gif A2592000 ExpiresByType image/png A2592000 ExpiresByType image/jpg A2592000 ExpiresByType image/jpeg A2592000 ExpiresByType image/ico A2592000 ExpiresByType image/svg+xml A2592000 ExpiresByType text/css A2592000 ExpiresByType text/javascript A2592000 ExpiresByType application/javascript A2592000 ExpiresByType application/x-javascript A2592000 </IfModule> <IfModule mod_headers.c> Header set Expires "max-age=2592000, public" Header unset ETag Header set Connection keep-alive FileETag None </IfModule> </FilesMatch> # END Cache
Compresion o Gzip
Configuramos los tipos de ficheros a devolver y le indicamos que los devuelva comprimidos. Esta opcion tambien puede ponerse desde el servidor.
# BEGIN GzipWpFastestCache <IfModule mod_deflate.c> AddType x-font/woff .woff AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE font/opentype font/ttf font/eot font/otf </IfModule> # END GzipWpFastestCache
Mejora de la Seguridad
Desactivar XML-RPC
# Disable XML-RPC - Security > Settings > WordPress Tweaks > XML-RPC <files xmlrpc.php> <IfModule mod_authz_core.c> Require all denied </IfModule> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> </files>
Proteger ficheros y directorios
# Disable Directory Browsing - Security > Settings > System Tweaks > Directory Browsing Options -Indexes <IfModule mod_rewrite.c> RewriteEngine On # Protect System Files - Security > Settings > System Tweaks > System Files RewriteRule ^wp-admin/includes/ - [F] RewriteRule !^wp-includes/ - [S=3] RewriteCond %{SCRIPT_FILENAME} !^(.*)wp-includes/ms-files.php RewriteRule ^wp-includes/[^/]+\.php$ - [F] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F] RewriteRule ^wp-includes/theme-compat/ - [F] # Disable PHP in Uploads - Security > Settings > System Tweaks > Uploads RewriteRule ^wp\-content/uploads/.*\.(?:php[1-6]?|pht|phtml?)$ - [NC,F] # Filter Request Methods - Security > Settings > System Tweaks > Request Methods RewriteCond %{REQUEST_METHOD} ^(TRACE|DELETE|TRACK) [NC] RewriteRule ^.* - [F] # Filter Suspicious Query Strings in the URL - Security > Settings > System Tweaks > Suspicious Query Strings RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR] RewriteCond %{QUERY_STRING} ^.*\.(bash|git|hg|log|svn|swp|cvs) [NC,OR] RewriteCond %{QUERY_STRING} etc/passwd [NC,OR] RewriteCond %{QUERY_STRING} boot\.ini [NC,OR] RewriteCond %{QUERY_STRING} ftp\: [NC,OR] RewriteCond %{QUERY_STRING} http\: [NC,OR] RewriteCond %{QUERY_STRING} https\: [NC,OR] RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR] RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR] RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR] RewriteCond %{QUERY_STRING} ^.*(127\.0).* [NC,OR] RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR] RewriteCond %{QUERY_STRING} ^.*(request|concat|insert|union|declare).* [NC] RewriteCond %{QUERY_STRING} !^loggedout=true RewriteCond %{QUERY_STRING} !^action=jetpack-sso RewriteCond %{QUERY_STRING} !^action=rp RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$ RewriteCond %{HTTP_REFERER} !^http://maps\.googleapis\.com(.*)$ RewriteRule ^.* - [F] # Filter Non-English Characters - Security > Settings > System Tweaks > Non-English Characters RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F).* [NC] RewriteRule ^.* - [F] </IfModule> # END iThemes Security - Do not modify or remove this line
Proteger de comentarios
Aquí importante tenéis que sobreescribir localhost por el nombre de tu dominio 😛
Estas lineas las dejare desactivadas en el fichero base por si os lo descargáis que no tengáis problemas.
# Reduce Comment Spam - Security > Settings > System Tweaks > Comment Spam RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} /wp-comments-post\.php$ RewriteCond %{HTTP_USER_AGENT} ^$ [OR] RewriteCond %{HTTP_REFERER} !^https?://(([^/]+\.)?localhost|jetpack\.wordpress\.com/jetpack-comment)(/|$) [NC] RewriteRule ^.* - [F]
Fichero comprimido con el .htaccess
Apendices
Poco a poco sigo ampliando mi htaccess y en este caso muchos de los ataques vienen porque los malignos 😛 localizan los usuarios administradores. Lo hacen con una técnica muy simple que en este caso la comentaba boluda.com un sitio donde podréis encontrar cursos y tutoriales de WordPress muy buenos.
Si vosotros cogéis un WordPress y ponéis lo siguiente http://www.vuestrodominio.com?author=1 que es el primer usuario que se crea veréis que os da el nombre del usuario y os mostrara la url quedando así http://www.vuestrodominio.com/author/pepito/
Ya sabéis que es pepito el usuario así que no tenéis mas que intentar en el login probar claves 😛
con las siguientes lineas evitáis esto.
# Bloquear a los listillos que intentan descubrir vuestro author RewriteCond %{QUERY_STRING} ^author=([0-9]*) RewriteRule .* http://example.com/? [L,R=302]
- no se incluye en el fichero estas lineas.