RewriteEngine On Options +FollowSymLinks -Indexes #-- Bloquea patrones de inyecciones SQL RewriteCond %{QUERY_STRING} (;|<|>|’|”|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark) [NC,OR] RewriteCond %{QUERY_STRING} \.\./\.\. [OR] RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR] RewriteCond %{QUERY_STRING} \.[a-z0-9] [NC,OR] RewriteCond %{QUERY_STRING} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC] RewriteRule .* - [F] #-- Deshabilita peticiones desde comandos como wget o peticiones desde programas como HTTrack o Harvest 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|%00) [NC] RewriteRule .* - [F] #-- Previene XSS y ciertas manipulaciones de direcctorios RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC] RewriteRule .* - [F] #-- Deshabilita el acceso a ciertos directorios RewriteRule ^(cache|logs|tmp)/ - [R=404] #-- Deshabilita el acceso a ciertos archivos RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_URI} \.php|\.ini|\.xml [NC] RewriteCond %{REQUEST_URI} \/administrator\/ [OR] RewriteCond %{REQUEST_URI} \/images\/ [OR] RewriteCond %{REQUEST_URI} \/cache\/ RewriteRule ^(.*)$ index.php [R=404] #-- Bloquea el acceso a todo archivo o directorio que comience por _ #require valid-user Order allow,deny Deny from all Satisfy all #-- Bloquea el acceso a todo archivo con extensión .old Order allow,deny Deny from all Satisfy all ErrorDocument 404 "Hay un error 404" ErrorDocument 403 "Hay un error 403"