Table of Contents
- ¿Qué es el Archivo .htaccess?
- Cómo Editar el Archivo .HTACCESS
- ¿No Encuentro el Archivo .HTACCESS?
- Cómo Usar el Archivo .htaccess
- #1 Negar Acceso a los Visitantes por Dirección IP
- #2 Prevenir Solicitudes con Caracteres no válidos
- #3 Redirecciones usando .HTACCESS
- #4 Forzar SSL usando .HTACCESS
- #5 Ads.Txt Manager
- #6 Proteger el Archivo .HTACCESS
- #7 Usar el CortaFuego de Perishable Press (7G Firewall)
- #8 Proteger el Archivo WP-Config
- #9 Proteger el Registro de Errores
- #10 Proteger tu Sitio de Inyecciones SQL
- #11 Proteger contra HotLinking
- #12 Restringir el Acceso a Archivos PHP de la Carpeta de Plugins y Temas
- #13 Proteger el Directorio de WP Includes
- #14 Impedir la Navegación por los Directorios
- #15 Bloquear Escaneo de Autores
- #16 Bloquear Archivo XMLRPC
- #17 Bloquear el Acceso al Archivo ReadMe.HTML
- #18 Bloquear Acceso al Archivo License.txt
- #19 Bloquear Ataques XSS (Cross Site Scripting)
- #20 Proteger contra Inyecciones SQL
- #21: Detener Ataques de FingerPrints
- #22 Server Signature OFF
- #23 Desactivar HTTP Track and Trace
- #23 Activar HTTP Strict Transport Security (HSTS)
- #25 Proteger contra Ataques XSS
- #26 Proteger contra XFraming y Clickjacking
- #27 Proteger contra Content Sniffing
- #28 Referrer Policy
- #29 Feature Policy
- #30 X-XSS-Protection
- Recursos
¿Qué es el Archivo .htaccess?
.htaccess es un archivo de configuración para usar en servidores web que ejecutan el software Apache Web Server.
Cuando un archivo .htaccess se coloca en un directorio que a su vez se ‘carga a través del servidor web Apache’, el software del servidor web Apache detecta y ejecuta el archivo .htaccess.
Estos archivos .htaccess se pueden usar para alterar la configuración del software Apache Web Server para habilitar / deshabilitar funcionalidades y características adicionales que el software Apache Web Server tiene para ofrecer.
Cuando abres un archivo .htaccess que no ha sido editado por plugins o manualmente, este tiene las siguientes líneas de código:
# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Cómo Editar el Archivo .HTACCESS
El archivo .HTACCESS lo puedes editar de 3 formas.
- La primera de esas formas es mediante el uso de un plugin para que puedes realizar los cambios desde el escritorio de wordpress. El plugin que recomiendo para esta gestión es Htaccess Editor – Safely Edit Htaccess File
- La segunda forma de realizar modificaciones al archivo es por medio de un gestor de archivo. Dependiendo del proveedor de hosting, puede ser que puedas editar ese archivo desde la cuenta de hosting.
- La tercera opción es mediante el uso de credenciales SFTP, con esta puedes entrar al folder de instalación y encontrarás el archivo .HTACCESS en la raíz de tu sitio.
¿No Encuentro el Archivo .HTACCESS?
Una de los problemas que encuentran algunos usuarios, es que estos van a la raíz de la instalación de WordPress y no encuentran el archivo . HTACCESS
Hay dos soluciones para lograr esto:
- La primera de estas es crear el archivo ya que es un archivo de texto sencillo con el código ya mencionado. Una vez listo, lo pegas en la raíz de la instalación de WordPress y lo nombras .HTACCESS
- La segunda opción es mucho más sencilla, esta consiste en ir al escritorio de WordPress, luego a ajustes y luego a enlaces permanentes. Estando en la pagina, vas al final de la misma y le das guardar cambios
Usa el segundo metodo que genera menos complicaciones.
Cómo Usar el Archivo .htaccess
Con el archivo .htaccess, puedes implementar reglas de seguridad para wordpress y algunas otras funcionalidades.
#1 Negar Acceso a los Visitantes por Dirección IP
Las facilidades de bloqueo de visitantes que ofrece el servidor web Apache nos permiten denegar el acceso a visitantes específicos o permitir el acceso a visitantes específicos.
Esto es extremadamente útil para bloquear visitantes no deseados o para permitir que el propietario del sitio web acceda a ciertas secciones del sitio web, como un área de administración.
order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all
Las líneas anteriores le indican al servidor web Apache que bloquee a los visitantes de la dirección IP ‘255.0.0.0’ y ‘123.45.6.’
Tenga en cuenta que a la segunda dirección IP le falta el cuarto conjunto de dígitos, esto significa que cualquier dirección IP que coincida con el primeros tres dígitos se bloqueará
Por ejemplo:
- 123.45.6.10
- 123.45.6.255
Si deseas permitir únicamente tu dirección IP, puedes hacerlo sustituyendo la dirección IP por la tuya
order allow,deny
allow from 255.0.0.0
deny from all
#2 Prevenir Solicitudes con Caracteres no válidos
Si lo desea, puede usar Mod_Rewrite para denegar solicitudes que contengan caracteres no válidos, tenga en cuenta que con ciertas configuraciones del sitio esto puede romper los enlaces.
Para habilitar esto, cree un archivo .htaccess siguiendo las instrucciones y guías principales, e incluya el siguiente texto:
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9} [a-zA-Z0-9.+_/-?=&]+ HTTP/ [NC]
RewriteRule .* - [F,NS,L]
#3 Redirecciones usando .HTACCESS
Hay muchas redirecciones que puedes realizar usando el archivo .HTACCESS
Este es un ejemplo, muy práctico en caso que quieras dirigir los errores 404 a una página en particular de tu sitio.
# Redirect 404 Error pages to the home page
ErrorDocument 404 http://example.com/
Este es un ejemplo de cómo agregar o quitar el WWW de tu sitio sin que tengas problemas con el posicionamiento web de tus paginas.
Agregando www al dominio
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
Quitando el www del dominio
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^/?$ "http://example.com/" [R=301,L]
Redirección permanente de una URL
RewriteEngine On
RewriteBase /
Redirect 301 /urlactual https://www.tudominio.com/urlnueva
Completa redirección a un nuevo sitio
Redirect 301 / http://newsite.com/
#4 Forzar SSL usando .HTACCESS
Este es el código que debes poner el archivo .htaccess para asegurar que haya un direccionamiento forzado de http a https
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://ejemplo.com/$1 [R=301,L,NE]
Asegurate de agregar tu nombre de dominio antes de guardar los cambios
#5 Ads.Txt Manager
Una de las buenas cosas de usar este archivo es que te puede ahorrar un plugin con el solo hecho manejar este archivo.
Por ejemplo, el plugin ads.txt manager lo unico que realiza es añadir una redireccion al archivo .htaccess
#BEGIN_ADSTXTMANAGER_HTACCESS_HANDLER
<IfModule mod_rewrite.c>
Redirect 301 /ads.txt https://srv.adstxtmanager.com/8025/example.com
</IfModule>
#END_ADSTXTMANAGER_HTACCESS_HANDLER
#6 Proteger el Archivo .HTACCESS
Una de las medidas de seguridad para tu sitio WordPress debe ser la protección del archivo .HTACCESS.
Esto lo puedes hacer mediante este código:
# STRONG HTACCESS PROTECTION
<Files ~ "^.*.([Hh][Tt][Aa])">
Order allow,deny
Deny from all
Satisfy all
</Files>
#7 Usar el CortaFuego de Perishable Press (7G Firewall)
Jeff Star de Perishable Press tiene un código que permite bloquear un gran número de amanazas.
Estas son algunas de las que se detallan.
- Directory Traversal
- HTTP Response Splitting
- (XSS) Cross-Site Scripting
- Cache Poisoning
- Dual-Header Exploits
- SQL/PHP/Code Injection
- File Injection/Inclusion
- Null Byte Injection
- WordPress exploits such as revslider, timthumb, fckeditor, et al
- Exploits such as c99shell, phpshell, remoteview, site copier, et al
- PHP information leakage
Para ser respetuoso del trabajo de Jeff, puedes bajar el código que debes agregar al archivo htaccess desde su página.
Busca la sección que se llama Download 7G Firewall: Perishable Press
#8 Proteger el Archivo WP-Config
Uno de los archivos que debes proteger es el archivo wp.config.php debido a que este tiene información bastante sensible del sitio.
Este es el código que debes usar para impedir que terceros lo usen
# Protect wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>
Método de Verificación
Para verificar que este procedimiento esta funcionando correctamente, solo debes de escribir el nombre de tu sitio y la terminación wp-config.php
https://ejemplo.com/wp-config.php
#9 Proteger el Registro de Errores
Este el archivo que se usa para proteger el registro de errores
#Protect error_log
<files error_log>
order allow,deny
deny from all
</files>
#10 Proteger tu Sitio de Inyecciones SQL
#Protect from SQL Injection
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (< |%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
#11 Proteger contra HotLinking
# Disable hotlinking of images
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?example.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.com [NC]
RewriteRule .(jpg|jpeg|png|gif)$ – [NC,F,L]
#12 Restringir el Acceso a Archivos PHP de la Carpeta de Plugins y Temas
# Restrict Direct Access to Plugin and Theme PHP files
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*.php)$ - [R=404,L]
#13 Proteger el Directorio de WP Includes
Cada Instalación de WordPress tiene tres carpetas en la raíz:
- wp-admin
- wp-content
- wp-includes
Este código protege a los archivos que se encuentran en la carpeta wp-includes
# Protect Include-Only files
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</ifmodule>
#14 Impedir la Navegación por los Directorios
Esto impide que alguien vea el listado de archivos que conforman tu instalación de WordPress.
Si alguien tiene acceso a esos archivos, puede fácilmente buscar vulnerabilidades en tu sitio.
# Disable directory browsing
Options All -Indexes
Método de Verificación
Puedes verificar esto por medio del siguiente sitio: SeoSiteCheckUp.com
#15 Bloquear Escaneo de Autores
Los hackers usualmente tratan de identificar cual es el autor del sitio por lo que usan esta combinación para determinar el número de usuarios en el sitio.
https://example.com/?author=1
Para bloquear esos intentos puedes usar este código:
# BEGIN block author scans
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (author=d+) [NC]
RewriteRule .* - [F]
# END block author scans
#16 Bloquear Archivo XMLRPC
Este es el código para bloquear el acceso al archivo XMLRPC.PHP
# Block WordPress xmlrpc.php requests
<files xmlrpc.php>
order deny,allow
deny from all
</files>
#17 Bloquear el Acceso al Archivo ReadMe.HTML
Este es el código para bloquear el acceso al archivo readme.html
# Deny access to readme.html
<files readme.html>
Order allow,deny
Deny from all
</files>
#18 Bloquear Acceso al Archivo License.txt
Este es el código para bloquear el acceso al archivo license.txt
# Deny access to license.txt
<files license.txt>
Order allow,deny
Deny from all
</files>
#19 Bloquear Ataques XSS (Cross Site Scripting)
Este código bloquea los ataques xss
# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>
#20 Proteger contra Inyecciones SQL
Este es un código para protegerte contra inyecciones SQL
# Protect Against SQL Injection
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} ../ [NC,OR]
RewriteCond %{QUERY_STRING} boot.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag= [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} ^.*([|]|(|)|<|>|ê|"|;|?|*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare).* [NC]
RewriteCond %{HTTP_COOKIE} !^.*WordPress_logged_in_.*$
RewriteRule ^(.*)$ - [F,L]
</IfModule>
#21: Detener Ataques de FingerPrints
# Fingerprinting Attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} PHP[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12} [NC,OR]
RewriteCond %{REQUEST_URI} =PHP[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12} [NC]
RewriteRule .* - [F,L]
</IfModule>
Puedes verificar que este reglas del archivo .HTACCESS esta funcionando:
https://tusitio.com/ ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
#22 Server Signature OFF
Para proteger la firma de tu servidor, debes pegar este codigo en el archivo .HTACCESS
#105 Disable the server signature
ServerSignature Off
Puedes verificar que la protección fue aplicada usando este enlace: Server Signature OFF
#23 Desactivar HTTP Track and Trace
Segun Jeff Star de Perishable Press, la implementación de este código impide que hackers hagan cross site scripting attacks
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
#23 Activar HTTP Strict Transport Security (HSTS)
Para la implementación de esta medida de seguridad debes de usar SSL. Esta medida le dice al navegador que todos las solicitudes del navegador deben hacerse por medio del protocolo https
Header always set Strict-Transport-Security "max-age=31536000" env=HTTPS
Puedes verificar la implementación en esta dirección: Security Headers
Debes ver este valor en verde si esta aplicado correctamente: Strict-Transport-Security
#25 Proteger contra Ataques XSS
# X-XSS-Protection
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
#26 Proteger contra XFraming y Clickjacking
# X-Frame-Options
<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
Puedes verificar la implementación en esta dirección: Security Headers
Debes ver este valor en verde si esta aplicado correctamente: X-Frame-Options
#27 Proteger contra Content Sniffing
La implementación de este encabezado de seguridad, se le conoce como: X-Content-Type-Options: nosniff
# X-Content-Type nosniff
<IfModule mod_headers.c>
Header set X-Content-Type-Options nosniff
</IfModule>
Puedes verificar la implementación en esta dirección: Security Headers
Debes ver este valor en verde si esta aplicado correctamente: X-Content-Type-Options
#28 Referrer Policy
# Referrer-Policy
<IfModule mod_headers.c>
Header set Referrer-Policy "same-origin"
</IfModule>
Puedes verificar la implementación en esta dirección: Security Headers
Debes ver este valor en verde si esta aplicado correctamente: Referrer Policy
#29 Feature Policy
# Feature-Policy
<IfModule mod_headers.c>
Header set Feature-Policy "geolocation 'self'; vibrate 'none'"
</IfModule>
Puedes verificar la implementación en esta dirección: Security Headers
Debes ver este valor en verde si esta aplicado correctamente: Feature Policy
#30 X-XSS-Protection
# X-XSS-Protection
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>

Recursos
Estos son algunos que hicieron posible que escribiera esta publicación