El fichero .htaccess
es la primera línea de entrada de cualquier sistema web montado sobre Apache, así que también puede convertirse en la primera línea de defensa frente a ataques de hackers, inyecciones de código o intrusiones.
Además, como su construcción es ya veterana está muy documentada y fácil de configurar. Si usas WordPress y has cambiado la estructura de enlaces permanentes, ya tendrás (por lo menos) un fichero .htaccess
en la carpeta raíz de tu instalación.
Las cadenas que añade WordPress suelen ser estas:
# 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
Y uno de los mejores, y más simples métodos de proteger tu WordPress es añadir reglas que bloqueen automáticamente peticiones basadas en cadenas en la URL.
Por ejemplo, no hay razón alguna (al menos buena) para que una URL empiece con un corchete «[«. Solo hay dos motivos «normales«, uno que sea un error de tecleo, y el otro que esté buscando agujeros de seguridad. Así que una primera regla a aplicar para evitar esto sería añadir una regla que provoque una página de error «403 Forbidden» a todo aquel que llegue a tu sitio con la URL comenzando con un corchete.
Añades esto al principio del archivo .htaccess
y guardas los cambios:
RedirectMatch 403 \[
¿Quieres más?, pues estamos de suerte porque en Perishable Press han creado algo que han llamado el 5G Firewall, que viene a ser una lista de reglas para .htaccess
que bloquea una buena cantidad de posibles atacantes que, en su versión actual, nos ofrece esto:
# 5G FIREWALL from PerishablePress.com # 5G:[QUERY STRINGS] <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} (environ|localhost|mosconfig|scanner) [NC,OR] RewriteCond %{QUERY_STRING} (menu|mod|path|tag)\=\.?/? [NC,OR] RewriteCond %{QUERY_STRING} boot\.ini [NC,OR] RewriteCond %{QUERY_STRING} echo.*kae [NC,OR] RewriteCond %{QUERY_STRING} etc/passwd [NC,OR] RewriteCond %{QUERY_STRING} \=\\%27$ [NC,OR] RewriteCond %{QUERY_STRING} \=\\\'$ [NC,OR] RewriteCond %{QUERY_STRING} \.\./ [NC,OR] RewriteCond %{QUERY_STRING} \: [NC,OR] RewriteCond %{QUERY_STRING} \[ [NC,OR] RewriteCond %{QUERY_STRING} \] [NC] RewriteRule .* - [F] </IfModule> # 5G:[USER AGENTS] <IfModule mod_setenvif.c> SetEnvIfNoCase User-Agent ^$ keep_out SetEnvIfNoCase User-Agent (casper|cmsworldmap|diavol|dotbot) keep_out SetEnvIfNoCase User-Agent (flicky|ia_archiver|jakarta|kmccrew) keep_out SetEnvIfNoCase User-Agent (libwww|planetwork|pycurl|skygrid) keep_out <Limit GET POST PUT> Order Allow,Deny Allow from all Deny from env=keep_out </Limit> </IfModule> # 5G:[REQUEST STRINGS] <IfModule mod_alias.c> RedirectMatch 403 (https?|ftp|php)\:// RedirectMatch 403 /(cgi|https?|ima|ucp)/ RedirectMatch 403 (\=\\\'|\=\\%27|/\\\'/?|\)\.css\()$ RedirectMatch 403 (\,|//|\)\+|/\,/|\{0\}|\(/\(|\.\.\.|\+\+\+|\|) RedirectMatch 403 \.(cgi|asp|aspx|cfg|dll|exe|jsp|mdb|sql|ini|rar)$ RedirectMatch 403 /(contac|fpw|install|pingserver|register)\.php RedirectMatch 403 (base64|crossdomain|localhost|wwwroot) RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo.*kae) RedirectMatch 403 \.well\-known/host\-meta RedirectMatch 403 /function\.array\-rand RedirectMatch 403 \)\;\$\(this\)\.html\( RedirectMatch 403 proc/self/environ RedirectMatch 403 msnbot\.htm\)\.\_ RedirectMatch 403 /ref\.outcontrol RedirectMatch 403 com\_cropimage RedirectMatch 403 indonesia\.htm RedirectMatch 403 \{\$itemURL\} RedirectMatch 403 function\(\) RedirectMatch 403 labels\.rdf </IfModule>
Estas reglas incluyen la protección contra URLs con corchetes y, como puedes ver, muchísimo más.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Creo que lees la mente Fernando, justo después del problema que reporté en el blog sobre archivos PHP y JS sacas un artículo sobre el tema y ahora que estoy pensando poner un .htaccess más seguro vienes y ¡zas! publicas esto. Gracias mil.
+1
Lamentablemente no he podido efectuar los cambios, me sale error 505.
Esto creo que es lo que buscaba para impedir código en Base64. Lo que se hablaba en el post anterior sobre infección.
RedirectMatch 403 (base64|crossdomain|localhost|wwwroot)
Mil gracias!
Fernando, efectué los cambios tal cual lo propones y también me sale error 505 al intentar acceder al sitio… ¿alguna pista del porqué?
si tienes un pluging de cache seguramente no te funcione correctamente
NO Funciona en WP MU, si alguien sabe como podría hacerlo funcionar les agradezco.
Muchas gracias, siempre me hacen ataque doss o algo asi que me lo bloquea por unos minutos… ¿Esto me ayuda?
Hola FERNANDO este es mi htaccess
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
–>La diferencia entre el mio y el ejemplo que tu pusistes al inicio es observa:
Yo–> RewriteRule ^index.php$ – [L]
Tu–> RewriteRule ^index.php$ – [L]
MIs preguntas??????
1-porque esta diferencia es grave?
-quiero agregar–> RedirectMatch 403 [ <–
2-donde lo devo colocar especificamente debajo de ?
Gracias de antemano y disculpa las molestias.
Tampoco funciona en instalaciones de WP 3.2.x y 3.1.x asi mismo con el WP MU me da error 500 (error interno del servidor)
Hola Fernando.
Resumiendo , solo tendríamos que sustituir nuestro código completo del .htacces por este de aqui arriba?
OJO no se trata de sustituir tu código .htacces por el de ahi arriba, añádelo ANTES del que ya tienes…
y el RedirectMatch 403 [ va justo delante de todo esto no? (es lo primero de todo)