Cómo Usar el Archivo .htaccess

¿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 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