Guía para asegurar tu wordpress(parte-3)

Protección por medio del archivo .htaccess

¿Para qué sirve el archivo .htaccess?

El archivo de texto permite al autor de páginas web establecer las propiedades seleccionadas del servidor. Además, no necesita acceso completo de administrador y solo afecta el comportamiento del servidor para el directorio y subdirectorio seleccionado en el servidor. WordPress básicamente lo usa para establecer el comportamiento de las URL generadas para que sean compatibles con los motores de búsqueda.

¿Dónde puedo encontrar el archivo .htaccess?

El archivo se encuentra en la carpeta raíz (root) de su alojamiento web. Simplemente inicie sesión en FTP con la ayuda del cliente FTP seleccionado y debería ver el archivo.

htaccess

A veces, no se puede ver el archivo después de iniciar sesión en un cliente FTP. En este caso, es suficiente forzar la visualización de archivos ocultos en la configuración del programa (habitualmente Total Commander, WinSCP o FileZilla).

Si aún no ve el archivo, puede subirlo manualmente al servidor, o simplemente haga clic en «Configuración»> «Enlaces permanentes» en la configuración de WordPress para cambiar la configuración a otra que no sea básica y guardar. Ahora ya debería ver el archivo en el servidor. A continuación, puede cambiar de nuevo los ajustes.

¿Cómo editar .htaccess?

Para editar el archivo, puede usar cualquier editor de texto desde el Bloc de notas al editor de desasrrollo PSPad.  Antes de editar el archivo, haga una copia de seguridad del archivo en su PC para poder restablecer la configuración en caso de problemas.

Ejemplos de configuraciones

Configurar el archivo .htacces es una forma de proteger nuestro sistema WordPress, anteriormente vimos algunas formas de proteger nuestro WordPress en Seguridad en Worrdpress, en esta ocasión vamos a ver algunas de las configuraciones que podemos utilizar en nuestro .htaccess para proteger nuestro sistema.

Algunas configuraciones pueden crear conflicto con configuraciones existentes o con vuestro servidor, así que haz una copia de tu archivo .htaccess antes de modificarlo.

Bloquear comentarios a peticiones no referenciadas

#bloquear comentarios a peticiones no referenciadas 
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]

Denegar acceso a wpconfig

#denegar acceso a wpconfig
<files wp-config.php>
order allow,deny
deny from all
</files>

Asegurar los plugins

#asegurar los plugins
<Files ~ "\.(js|css)$">
  order allow,deny
  allow from all
</Files>

Acceso a wp-login.php solo IPs permitidas

#acceso a wp-login.php solo IPs permitidas
<files wp-login.php>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</files>

Bloquea y protege wp-content

#bloquea y protege wp-content
Order deny,allow
Deny from all
<Files ~ “.(xml|css|jpe?g|png|gif|js)$”>
Allow from all
</Files>

Bloquea todas las peticiones de user-agent

#bloquea todas las peticiones de user-agent
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
Order Allow,Deny
Allow from all
Deny from env=bad_bot

Crea una página personalizada para cada tipo de error

#crea una página personalizada para cada tipo de error
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

Deshabilita la navegación por directorios de tu sitio

#deshabilita la navegación por directorios de tu sitio
Options All -Indexes

Protege el archivo .htaccess

#protege el archivo .htaccess
<Files .htaccess>
Order allow,deny
Deny from all
</Files>

Prevenir el hotlinking

#prevenir el hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?misitio\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpg|gif|bmp|png)$ http://hotlink.misitio.com/no_se_permite_hotlinking.jpg [L]

Proteger ataques DOS limitando el tamaño de subida de archivos

#proteger ataques DOS limitando el tamaño de subida de archivos  
LimitRequestBody 10240000 

Protege archivos vulnerables

#protege archivos vulnerables
<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>

Evita sql injection

#evita sql injection
RewriteEngine On
Options +FollowSymLinks
ServerSignature Off
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC,OR] 
RewriteCond %{HTTP_REFERER} ^(.*)(<|>|'|%0A|%0D|%27|%3C|%3E|).* [NC,OR]
RewriteCond %{HTTP_COOKIE} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|).* [NC,OR]
RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|">|"<|/|\\\.\.\\).{0,9999}.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|scan).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]RewriteCond %{QUERY_STRING} ^.*\.[A-Za-z0-9].* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|).* [NC]
RewriteRule ^(.*)$ hack.cfm

Seguridad extra para php

#seguridad extra para php  
php_flag safe_mode on  
php_flag expose_php off  
php_flag display_errors off

Evita escaneos

#evitar escaneos
RewriteEngine On  
Options +FollowSymLinks 
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]  
RewriteCond %{HTTP_USER_AGENT} ^(-|\.|') [OR]  
RewriteCond %{HTTP_USER_AGENT} ^(.*)(<|>|%3C|%3E)(.*) [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget)(.*) [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} ^(.*)(libwww-perl|libwwwperl|snoopy|curl|wget|winhttp|python|nikto|scan|clshttp|archiver|loader|email|harvest|fetch|extract|grab|miner|suck|reaper|leach)(.*) [NC,OR]  
RewriteCond %{REQUEST_URI} ^(/,|/;|/<|/>|/'|/`|/%2C|/%3C|/%3E|/%27|/////) [NC,OR]  
RewriteCond %{HTTP_REFERER} ^(.*)(%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|<|>|'|%3C|%3E|%26%23|%27|%60)(.*) [NC,OR]  
RewriteCond %{QUERY_STRING} ^(.*)(%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|%3C|%3E|%27|%26%23|%60)(.*) [NC,OR]  
RewriteCond %{QUERY_STRING} ^(.*)('|-|<|>|,|/|\\|\.a|\.c|\.t|\.d|\.p|\.i|\.e|\.j)(.*) [NC,OR]  
RewriteCond %{HTTP_COOKIE} ^(.*)(<|>|'|%3C|%3E|%27)(.*) [NC]  
RewriteRule ^(.*)$ error.php [NC]

No permitir acceso a .htaccess

#no permitir acceso a .htaccess  
<Files ~ “^.*\.([Hh][Tt][Aa])”>
order allow,deny
deny from all
satisfy all
</Files>