Upload
luis-edmundo-figueroa
View
221
Download
0
Embed Size (px)
Citation preview
7/21/2019 Gua de HTACCESS.docx
1/31
Gua de HTACCESS
ndice1. Introduccin al .htaccess
2. Bloqueando y permitiendo acceso3. Re-escritura y Redireccin4. Compresin y cach5. Otras funcionalidades del .htaccess6. Recomendaciones sobre el fichero .htaccess7. Simbologa del fichero .htaccess
1.- IntroduccinHay muchsimos artculos en la red sobre el fichero .htaccess, as que es una buena forma deagrupar y reunir lo que realmente es interesante sobre este tema, mediante ejemplos claros quesirvan como ejemplo.Primero, tenemos que decir que el fichero .htaccess es una verdadera 'navaja suiza' para el controldel acceso a tu sitio web. Con ella se puede redireccionar a una persona, denegar el acceso,comprimir los ficheros, establecer una cach para los archivos, etc..htaccess significa acceso de hipertexto -hipertext access- y es un archivo de configuracin deApache. Apache es el software encargado de servir pginas web para plataformas Unix, MicrosoftWindows, Mac, etc.
Advertencia:un error en el .htaccess puede hacer que no se vea la web hasta que se arregledicho error.
Es evidente, pero importante, saber que en todos los ejemplos habr que sustituir los nombresgenricos y las IP por las correctas en tu servidor. En muchos casos los dominios son del tipodominio.com, ejemplo1.com, ejemplo2.com y similares, y las IP suelen ser 100.100.100.100,100.101.102.103, y parecidas.
2.- Bloqueando y Permitiendo Acceso
Denegar el acceso a un directorio -carpeta- del servidorCrear un fichero .htaccess dentro de la carpeta con las instrucciones:
#denegar todo accesodeny from all
7/21/2019 Gua de HTACCESS.docx
2/31
Permitir el acceso slo a una IP
#denegar todo acceso excepto una IPdeny from allallow from 100.100.100.100
Permitir el acceso slo a un rango especfico de IPs(forzado mediante la mscara de red)
#denegar todo acceso excepto a un rango de IPdeny from allallow from 100.100.100.100/24
Bloquear el acceso a un archivo especfico
#bloquear un fichero concretoorder allow,denydeny from all
Redireccionar visitantes a una direccin alternativa, menos
a una IP especfica#Redireccionar a todos a otrositio.com excepto una IP concretaErrorDocument 403 http://www.otrositio.comorder deny,allowdeny from allallow from 100.101.102.103
Denegar un rango completo de IP
Esto quiere decir que elimina 256 direcciones en el primer caso, 65536 en el segundo caso, y msde 16 millones de direcciones IP en el tercer caso
# Primer caso: deniega el acceso a 256 IPs, desde la 100.100.100.0 hasta la 100.100.100.255order allow,denydeny from 100.100.100.
7/21/2019 Gua de HTACCESS.docx
3/31
# Segundo caso: deniega 65536 IPorder allow,denydeny from 100.100.
# Tercer caso: deniega todas las IP que empiezan por 100, que son ms de 16 millonesorder allow,denydeny from 100.
Permitir un rango concreto de IP a la web
# permitir acceso a rango 100.100.100.0 hasta 100.100.100.255order deny,allowallow from 100.100.100.
Denegar acceso de un dominio concreto
# bloquear acceso a un dominioorder allow,denyallow from alldeny from .*dominio\.com.*
Denegar acceso a visitantes que vengan de un dominio
concreto# bloquear acceso visitas desde ejemplo1.com y ejemplo2.comRewriteCond %{HTTP_REFERER} ejemplo1\.com [NC,OR]RewriteCond %{HTTP_REFERER} ejemplo2\.com [NC,OR]RewriteRule .* - [F]
Denegar acceso a una hora especfica
# bloquear acceso una horaRewriteCond %{TIME_HOUR} ^12$RewriteRule ^.*$ - [F,L]
Denegar acceso a un directorio a varias horas concretas
7/21/2019 Gua de HTACCESS.docx
4/31
# bloquear acceso en varias horasRewriteCond %{TIME_HOUR} ^(12|13|14|15)$RewriteRule ^.*$ - [F,L]
Denegar acceso a muchos proxies
# bloqueo de ProxiesRewriteCond %{HTTP:VIA} !^$ [OR]RewriteCond %{HTTP:FORWARDED} !^$ [OR]RewriteCond %{HTTP:USERAGENT_VIA} !^$ [OR]RewriteCond %{HTTP:X_FORWARDED_FOR} !^$ [OR]RewriteCond %{HTTP:PROXY_CONNECTION} !^$ [OR]RewriteCond %{HTTP:XPROXY_CONNECTION} !^$ [OR]RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$
RewriteRule ^(.*)$ - [F]
Prevenir accesos al archivo .htaccess
# prevenir acceso .htaccessorder allow,denydeny from all
Prevenir el acceso a un archivo especfico
#prevenir acceso a un fichero concretoorder allow,denydeny from all
Prevenir el acceso a varios tipos de archivos# prevenir acceso a tipos de ficheros concretosorder allow,denydeny from all
7/21/2019 Gua de HTACCESS.docx
5/31
Evitar que se muestren determinados tipos de ficheros
# evitar muestra de fichero MP4, WMV y AVIIndexIgnore *.wmv *.mp4 *.avi
Evitar el listado de directorios
# evitar listado de directoriosIndexIgnore *
Evitar el hotlinking en el dominio
El hotlinkinges cuando descargan ficheros de tu servidor desde otra web para mostrarlos en sta,'robando' ancho de banday servicios del tuyo.
# Evita el hotlinking a ficheros GIF y JPG del servidorRewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http://(www\.)?midominio\.com/.*$ [NC]RewriteRule .*\.(gif|jpg)$ https://reader008.{domain}/reader008/html5/0413/5ad062ec4d01b/5ad062f1492f4.jpg
Nota: Es ms eficaz, si el archivo que mostramos a aquellos que realizan el hotlinking lo colgamosen un servidor gratuito de imgenes tipo ImageShack.us (o similares) y lo referenciamos all.
Bloqueo de ficheros determinados el cualquier subdominio,para evitar hotlinking especficoPara evitar el hotlinking a ficheros MP3 y ficheros de vdeo AVI, WMV y MPG:
# Evita el hotlinking a ficheros MP3, AVI, WMV y MPG de cualquier subdominio y dominio delservidorRewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+\.)?midominio\.com [NC]RewriteRule .*\.(mp3|avi|wmv|mpg|mpeg)$ http://www.midominio.com/images/nohotlink.gif [R,NC,L]
Nota: si se envan ficheros por RSS -sindicacin del sitio- debe tenerse en cuenta, ya que lasinstrucciones anteriores bloquean todo el contenido de vdeo y los RSS pueden verse mal.
Nota: Es ms eficaz, si el archivo que mostramos a aquellos que realizan el hotlinking lo colgamosen un servidor gratuito de imgenes tipo ImageShack.us o similar, y lo referenciamos all.
7/21/2019 Gua de HTACCESS.docx
6/31
Bloqueo de robot -bot- especfico, a travs deSetEnvIfNoCase
# bloqueo del bot BotMaloSetEnvIfNoCase User-Agent "BotMalo/" spambot
deny from env=spambot
Bloque de robot -bot- especfico, a travs de Rewrite
# bloqueo de 3 bots conocidos (hay muchsimos ms)RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]RewriteCond %{HTTP_USER_AGENT} ^ZeusRewriteRule .* - [F]
Bloqueo de robot -bot- que accede siempre al mismofichero
# bloqueo del bot al acceder a un fichero PHP concretoSetEnvIfNoCase Request_URI "/firefoxz.php$" spambotdeny from env=spambot
Bloqueo de robot -bot- que siempre es referenciado desdeun mismo sitio, a travs de SetEnvIfNoCase
# bloqueo cuando se viene referenciado de un sitio web concretoSetEnvIfNoCase Referer "^http://www.dominiospammers.com/" spambotdeny from env=spambot
Nota: Las 3 anteriores sentencias pueden combinarse escribiendo las 3 lneas SetEnvIfNoCase, yluego solo un deny, de la siguiente forma:
SetEnvIfNoCase User-Agent "BotMalo/" spambot
SetEnvIfNoCase Request_URI "/firefoxz.php$" spambotSetEnvIfNoCase Referer "^http://www.spammers.com/" spambotdeny from env=spambot
7/21/2019 Gua de HTACCESS.docx
7/31
Bloqueo de robot -bot- que siempre es referenciado desdeun mismo sitio, a travs de Rewrite
# bloqueo cuando se viene referenciado de un sitio web concreto ejemplo1.comRewriteCond %{HTTP_REFERER} ^ejemplo1\.com$ [NC]
RewriteRule .* - [F]
Bloqueo de robot -bot- que siempre es referenciado desdedos sitios, a travs de Rewrite
# bloqueo cuando se viene referenciado desde ejemplo1.com o ejemplo2.comRewriteCond %{HTTP_REFERER} ^ejemplo1\.com$ [NC,OR]RewriteCond %{HTTP_REFERER} ^ejemplo2\.com$ [NC]RewriteRule .* - [F]
Evitar acceso mediante el navegador a una carpeta sin elarchivo "index"
# evitar acceso a carpeta sin indexOptions All -Indexes
Nota: lo contrario, es decir, permitir el acceso a carpetas sin index es:
# evitar acceso a carpeta sin indexOptions All +Indexes
3.- Re-escritura y redireccin
Quitar siempre las www de la URL
Es importante no repetir URLs-mostrando el mismo contenido con y sin www-, ya que penaliza elposicionamiento.
# quitar las wwwRewriteCond %{http_host} www\.netandsoftware\.com [NC]RewriteRule (.*)$ http://netandsoftware.com/$1 [R=301,L]
7/21/2019 Gua de HTACCESS.docx
8/31
Mostrar siempre las www de la URL
# mostrar siempre las wwwRewriteCond %{HTTP_HOST} .RewriteCond %{HTTP_HOST} !^www\.netandsoftware\.com$
RewriteRule (.*) http://www.netandsoftware.com/$1 [R=301,L]
Cambiar la pgina de carga por defecto
#orden de los ficheros de carga por defectoDirectoryIndex inicio.html index.htm index.html index.php
Nota: El orden es muy importante porque da la preferencia de los ficheros de carga
Camuflar el tipo de ficherosEsto se hace para que sea ms dificil detectar el tipo de ficheros que se usa
# camuflar archivos PHP como NASAddType application/x-httpd-php .nas
Redirigir el contenido en funcin del navegador usado
RewriteCond %{HTTP_USER_AGENT} ^Opera/*RewriteRule ^index\.html$ index.opera.html [L]RewriteCond %{HTTP_USER_AGENT} ^Mozilla/*RewriteRule ^index\.html$ index.mozilla.html [L]RewriteRule ^index\.html$ index.html [L]
Nota: Los asteriscos indican el uso de cualquier versin de ese navegador, por ejemplo:dicarse acontinuacin de la barra, como "Mozilla/3.0", "Mozilla/4.0", "Mozilla/5.0", etc.
Redireccionar una antigua pgina a la nueva# redireccionar permanentementeRewriteRule (.*)$ http://www.minuevodominio.com/$1 [R=301,L]
7/21/2019 Gua de HTACCESS.docx
9/31
Redireccionar una antigua pgina a la nueva, a travs deReDirect
# redireccionar permanentementeredirect 301 / http://www.dominio.com/
Redireccionar una web a otro sitio provisionalmente(redireccin 302)
# redireccionar provisionalmenteRewriteRule (.*)$ http://www.minuevodominio.com/$1 [R=302,L]
Redireccionar de un archivo a otro
# redireccionar un antiguo fichero a otra nueva direccinRedirect /antiguo.html http://dominio.com/nuevo.html
Redireccionar una IP concreta a una pgina concretaPuede servir para avisar a una persona con una IP concreta de que ha sido baneada.
# redireccionar una IP a una pgina concreta de nuestra webRewriteCond %{REMOTE_ADDR} 100.101.102.103RewriteRule .* pagina-concreta.html [R]
Redireccionar toda una web a un directorio del mismodominio
# traslada todas las URL antiguas a la nueva carpeta en el mismo dominioRewriteCond %{HTTP_HOST} ^midominio\.com$ [OR]RewriteCond %{HTTP_HOST} ^www\.midominio\.com$RewriteCond %{REQUEST_URI} !^/webencarpeta/RewriteRule (.*) /webencarpeta/$1 [L]
Quitar una palabra de una URLEn el siguiente ejemplo,de http://www.midominio.com/quitar/prueba.htmla http://www.midominio.com/prueba.html
7/21/2019 Gua de HTACCESS.docx
10/31
# quitar una cadena de una URLRewriteRule quitar/(.+)$ http://www.midominio.com/$1 [R=301,L]
URL amigable (uso de fin de interrogacin en RewriteRule)Cambia una URL como http://www.midominio.com/articulos-blog?catid=27a http://www.midominio.com/articulos-blog de forma permanente.
# Uso de ?RewriteCond %{REQUEST_URI} ^/articulos-blog$ [NC]RewriteCond %{QUERY_STRING} ^catid=(.*)$ [NC]RewriteRule ^(.*)$ /articulos-blog? [R=301,L]
URL amigable (uso del tanto por ciento en RewriteRule)Cambia una URL como http://www.dominio.com/noticias?id=127a http://www.dominio.com/noticias/127 de forma provisional.
# Uso del %RewriteCond %{REQUEST_URI} ^/noticias$ [NC]RewriteCond %{QUERY_STRING} ^id=(.*)$ [NC]RewriteRule ^(.*)$ /noticias/%1? [R=302,L]
Mejorando el posicionamiento SEO con RewriteRule
Cambia una URL con la cadena "ps" por una URL con la cadena "posicionamiento-seo" quedetermina mejor el contenido de las URLs.
# mejorando el posicionamiento SEO sustituyendo caracteres sin sentido por otros que determinanel contenidoRewriteRule ^(.*)/ps/(.*)$ $1/posicionamiento-seo/$2 [L,R=301]
Transformacin de una URL con agrupamiento decaracteres maysculas y minsculasCambia la URL de este tipo http://www.midominio.com/pais/Espana.php a
http://www.midominio.com/codigo/pais.php?nombre=Espana
# detectar palabras en maysculas o minsculas o combinacion de ambasRewriteRule ^pais/([a-zA-Z_-]+).php$ codigo/pais.php?nombre=$1 [L]
Paso de parmetros en la URL y doble parmetro
7/21/2019 Gua de HTACCESS.docx
11/31
Cambia una URL como http://www.midominio.com/fecha/2013/12.html ahttp://www.midominio.com/fecha.php?mes=12&anio=2013 de forma permanente
# Doble parmetroRewriteRule fecha/(.+)/(.+)\.html$ fecha.php?mes=$2&anio=$1 [R=301,L]
4.- Compresin y cach
Comprimir ficheros de texto, HTML, JavaScript, CSS y XML
# comprimir focheros texto, html, javascript, css, xmlAddOutputFilterByType DEFLATE text/plainAddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xmlAddOutputFilterByType DEFLATE text/cssAddOutputFilterByType DEFLATE application/xmlAddOutputFilterByType DEFLATE application/xhtml+xmlAddOutputFilterByType DEFLATE application/rss+xmlAddOutputFilterByType DEFLATE application/javascriptAddOutputFilterByType DEFLATE application/x-javascript
Tambin en una sla lnea:AddOutputFilterByType DEFLATEtext/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript
Cachear ficheros de imgenes a una semana
#Cache del navegador, imagenes cacheadas a una semana: 604800 segundosHeader set Cache-Control "max-age=604800, public"
Cachear ficheros JPG a un mes
#Cache del navegador, imgenes cacheadas a un mes: 2592000 segundosHeader set Cache-Control "max-age=2592000, public"
7/21/2019 Gua de HTACCESS.docx
12/31
Cachear con ExpiresByType y el intervalo legible
#cach que expira las imgenes JPG en 6 meses, los CSS en 2 meses, y los JavaScripts en 2semanasExpiresActive onExpiresByType image/jpg "access plus 6 months"ExpiresByType text/css "access plus 2 months"ExpiresByType text/javascript "access plus 2 weeks"
Cachear ficheros a un ao con ExpiresDefault y el intervaloen segundos
ExpiresActive On
ExpiresDefault A0# cach expira en un ao (A9030400) para los ficheros FLV, ICO, AVI, MOV, PPT, DOC, MP3,WMV y WAVExpiresDefault A9030400
5.- Otros funcionalidades en el .htaccess
Asignar permisos CHMOD automticamente al fichero.htpasswd
# permiso automtico del fichero que protege el directorio .htpasswdchmod .htpasswd files 640
Asignar permisos CHMOD automticamente al fichero
.htaccess# permiso automtico del fichero .htaccesschmod .htaccess files 644
Asignar permisos CHMOD automticamente a ficheros PHP
7/21/2019 Gua de HTACCESS.docx
13/31
# permisos automticos de archivos PHPchmod php files 600
Limitar la subida de ficheros ms grandes que una cantidadProtege de ciertos ataques DOS, limitando el tamao de archivos que se suben al servidor.# limitar la subida a 10 MBLimitRequestBody 10000000
Permitir al usuario descargar archivos multimediaGeneralmente slo se permiten abrir
# permitir descarga de ficheros multimedia AVI, MPG, WMV y MP3
AddType application/octet-stream .aviAddType application/octet-stream .mpgAddType application/octet-stream .wmvAddType application/octet-stream .mp3
Personalizar errores 404
ErrorDocument 404 /errores/404.html
Nota: Para otros tipos de errores es similar, se coloca el nmero de error y la direccin dondequeremos redireccionar al visitante.
Corregir pequeos errores de ortografa en las URL
CheckSpelling On
Especificar el e-mail por defecto del administrador del
servidor# e-mail del administrador del servidorSetEnv [email protected]
Especificar el lenguaje por defecto del servidor
mailto:[email protected]:[email protected]:[email protected]:[email protected]7/21/2019 Gua de HTACCESS.docx
14/31
# lenguaje por defecto del servidorDefaultLanguage en-US
Forzar el uso del protocolo seguro SSL# fuerza el uso de SSL en la webSSLOptions + StrictRequireSSLRequireSSL
Redireccionar usuarios con protocolo seguro HTTPS a unacarpeta en particularEsto se puede necesitar cuando una web tiene una tienda online en una carpeta especfica
RewriteCond %{SERVER_PORT} 80RewriteCond %{REQUEST_URI} carpetaRewriteRule (.*)$ https://www.midominio.com/carpeta/$1 [R,L]
Evitar la visualizacin de errores al visitante
# evitar que los errores se muestren al usuariophp_flag display_startup_errors offphp_flag display_errors offphp_flag html_errors off
Registrar errores de PHP en un fichero log
# registrar errores en logphp_flag log_errors onphp_value error_log /logs/php_error.log
Limitar el nmero de visitas al mismo tiempo a 400
# limitar el nmero de visitas a 400MaxClients 400
Denegar la ejecucin de scripts CGI
7/21/2019 Gua de HTACCESS.docx
15/31
# bloquear CGIsOptions -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .sh .cgi
Declarar tipos MIME
# agregar tipos mimeAddType application/x-shockwave-flash .swfAddType video/x-flv .flvAddType image/x-icon .ico
Definiendo el juego de caracteresPasando el juego de caracteres se evita el mostrar un error 500 por este motivo
AddDefaultCharset utf-8
Desactivar los Entities Tags
FileETag none
6.- Recomendaciones sobre el fichero .htaccess1. El tamao es importante: cuanto ms pequeo sea el fichero .htaccess menos tiempo
tardar el servidor en procesarlo cada vez que se realiza una peticin a tu servidor. Estoimplica una prdida de rendimiento en la carga de las pginas de tu sitio web si estefichero se hace demasiado grande.
2. La directiva [L] es realmente interesante y hace que el servidor no procese ms el archivouna vez que se cumple esa regla. Por lo que incorpora siempre que puedas esta directivaen los RewriteRule.
3. La organizacin es fundamental: dado lo complicada que pueden ser ciertas lneas en elcdigo de .htaccess, es imprescindible comentar adecuadamente tu fichero para que lamodificacin sea rpida y sencilla. No escatimes en comentarios, y organiza
adecuadamente las instrucciones de tu .htaccess.4. Protege adecuadamente este archivo de reescrituras ajenas, puede llegar a ser muy
peligroso.5. La denegacin de permisos debe estar lo primero, antes de ejecutar RewriteCond y
RewriteRule.
7.- Simbologa del fichero .htaccess
7/21/2019 Gua de HTACCESS.docx
16/31
De forma breve, los cdigos y smbolos en el archivo .htaccess son:
# Puesto al inicio de una lnea, ignora esa lnea.
[F] Forbidden: prohbe un acceso y fuerza un acceso denegado.403 Forbidden.
[L] Last rule: indica que es la ltima regla que debeaplicarse.
[N] Next: indica continuacin hasta que las directivas seanlogradas.
[G] Gone: indica al servidor que ya no existe, es decir,entrega "Gone".
[P] Proxy: instruye al servidor para manejar los pedidos pormod_proxy.
[C] Chain: encadena la regla actual con la regla anterior.
[R] Redirect: indica redireccin. Puede haber de varios tipos301 (permanente), 302 (provisional).
[NC] No Case: no sensible a maysculas, es decir, indica queno debe distinguirse entre maysculas y minsculas.
[PT] Pass Through: pasa el URL a Apache para seguirprocesando.
[OR] Or: indica que la expresin debe interpretase como unaalternativa junto a la siguiente: lgico. Si se omite, sesobreentiende que es una ylgica, por defecto.
[NE] No Escape: analiza las salidas de caracteres sinescapar.
[NS] No Subrequest: para saltar directivas de sub-pedidosinternos.
[QSA] Append Query String: agrega un query string al final dela expresin (URL).
[S=x] Skip: salta las siguientes "x" reglas del fichero.htaccess.
[E=variable:value] Environmental Variable: para aadir unvalor a una variable.
[T=MIME-type] Mime Type: declara mime-type al recurso.
7/21/2019 Gua de HTACCESS.docx
17/31
[] dentro de los parntesis se encierran carcteres quedefinen los resultados.
[]+ se utiliza para hacer combinaciones.
[^] excluye los carcteres que pongamos dentro del
parntesis. Ejemplo [^abc] excluye las letras a, b y c.
[a-z] letras desde la a hasta la z (en minsculas).
[A-Z] letras desde la A hasta la Z (en maysculas).
[a-zA-Z] slo letras (maysculas y minsculas).
[a-z]{1,10} palabras en minsculas entre 1 y 10 caracteres.
[0-9] slo un nmero.
[0-9]{4} nmeros de 4 cifras.
(.*) cualquier expresin, incluida la vaca.
a{n} especifica el nmero de caracteres.
a{n,} especifica el nmero "o ms" de caracteres.
a{n,m} especifica un rango entre "n" y "m". Ejemplo s{3,6}ser 3 "eses", 4 "eses", 5 "eses" o 6 "eses".
() es un agrupamiento de caracteres.
^ marca el inicio de un argumento.
$ marca el fin de un argumento.
? establece como opcional el caracter que le precede. Si sepone este smbolo al final del segundo argumento delRewriteRule, indicar que no se ponga nada ms en la URL.
! es la negacin. Ejemplo: "!string" resulta "no string".
. indica cualquier caracter arbitrario.
- instruccin not to.
+ indica uno o mscaracteres del caracter que le precede.Por ejemplo: (.+) indica cualquier cadena de uno o mscaracteres.| es el lgico, condicin de alternancia. Ejemplo (a|b) esel caracter ao el b.
7/21/2019 Gua de HTACCESS.docx
18/31
\ escapa caracteres, es decir, toma el caracter que le sigueliteralmente. Por ejemplo: \. indica literalmente un punto,ya que sin la barra invertida indicara cualquier caracter.
/* indica cero o ms "/".
.* indica cualquier caracter, incluido que no existacaracter.
^$ indica una cadena vaca.
^.*$ indica "todo", toda la cadena.
[^/.] define un caracter que no sea "/" ni ".".
[^/.]+ define, ningn nmero de caracter que tenga "/" o ".".
http:// es literalmente http://.
^dominio.* define una cadena que comience con "dominio" y lesiga cualquier nmero de caracteres.
^dominio\.com$ define exactamente dominio.com.
-d prueba si la cadena es un directorio existente.
-f prueba si la cadena es un archivo existente.
-s prueba si el archivo en la cadena no tiene valor cero.
Y espero que con estos ejemplos, tengan resueltas muchas de las opciones posibles paraconfigurar su propio .htaccess segn sus necesidades.
7/21/2019 Gua de HTACCESS.docx
19/31
CONSEJOS DEL USO DEL ARCHIVO .HTACCESS
El .htaccess es un simple archivo de texto (ASCII) en su carpeta www o en un subdirectoriodentro de la carpeta www. Usted puede crear o editar este archivo con cualquier editor de
texto (por ejemplo Notepad, Wordpad, etc) y luego subirlo al directorio que requiera modificarla configuracion. Debe de verificar que el archivo que sube este en formato ASCII (y no enformato Binario), y verificar que los permisos al archivo esten a 644 (rw-r--r--). Esto permiteque el servidor tenga alcceso al archivo, pero asimismo por razones de seguridad previeneacceso no autorizado al archivo por medio del explorador de internet (riesgo de seguridad).
Los comando dentro del archivo .htaccess afectarn al directorio donde este ubicado yademas en todos sus subdirectorios. Si usted coloca el archivo .htaccess en un directoriowww, esto afectar a todo el sitio web.
Algunas configuraciones soportadas por el .htaccess (varia segun el servidor hosting de
hospedaje) incluyen:
PERSONALIZACION DE MENSAJES
Si deseas superponer las paginas de error del servidor, puedes usar el .htaccess para definirsus propios mensajes. Un ejemplo de la sintaxis es:
#######################ErrorDocument 500 /error.htmlErrorDocument 404 /404.html#######################
Superponer configuracion SSI Por defecto, solo las pginas terminadas en extension .shtmlanalizara las inclusiones del lado del servidor (SSI) o en nuestros servidores. Usted puedesuperponer esta restriccion en su archivo .htaccess:
Si usted requiere superponer la configuracin por defecto del servidor para que SSI trabajecon documentos .html, puedes crear un archivo llamado .htaccess subirlo (en modo ASCII) asu directorio www. Agregue las siguiente lineas a su archivo .htaccess:
#######################AddType text/html .htmlAddHandler server-parsed .html
#######################
Si prefieres ambos tipos de documentos .html y .htm para analizar SSI, cree su archivo.htaccess con las siguiente lineas:
#######################AddType text/html .htmlAddHandler server-parsed .html
7/21/2019 Gua de HTACCESS.docx
20/31
AddHandler server-parsed .htm#######################
CAMBIE SU PGINA DE INICIO POR DEFECTO
En orden para ingresar a su sitio web especificando unicamente el nombre de dominio (por
ejemplo, http://www.soltronica.com) en vez de tener que especificar la pgina exacta delarchivo (Por ejemplo, http://www.soltronica.com/blog.html), deber de tener una pagina inicialen su directorio www. Los nombre de archivo aceptados por defecto para paginas de inicio sonindex.htm, index.html, index.cgi, index.shtml, index.php, etc. Note que todos son nombradoscomo index.*.
Inclusive existe un orden de precedencia para estos nombres. Asi que si usted cuenta porejemplo con 2 archivos uno llamado index.cgi y el otro llamado index.html en su directorio, elservidor mostrara index.cgi debido a que el nombre toma un mayor valor de precedencia queun index.html.
Entonces usando el .htaccess, puedes definir adicionales nombres de archivo (index) y ocambia su orden de precendecia.Por ejemplo para definir su pagina de inicio como mipagina.html agregue las siguientes lineasen su archivo .htaccess:
#######################DirectoryIndex mipagina.html#######################
Esto convertira el archivo mipagina.html en su pagina de inicio, pero si es que el archivo no seencontrara en esa ubicacin luego de definirlo entonces el sistema devolvera el error: 404
Missing Page error.
Para cambiar el orden de precedencia, ingrese varios comandos DirectoryIndex con multiplesnombres de archivo en la misma lnea. El orden en la cual los archivo son listados (deizquierda a derecha) determina el orden de precedencia. Por ejemplo,
#######################DirectoryIndex mipagina.html index.cgi index.php index.html#######################
DESACTIVAR LA EXPLORACIN DE LOS DIRECTORIOS
Cuando en un directorio raiz no existe el archivo index, o no se ha definido una pagina deinicio, por defecto el explorador de internet mostrar un listado de los archivos que contienedicha carpeta o raiz.Esto es un riesgo de seguridad pues conlleva a divulgar sus archivos de la carpeta. Si ustedrequiere mantener sus archivos ocultos, entonce debe de agregar el siguiente codigo a suarchivo .htaccess:
7/21/2019 Gua de HTACCESS.docx
21/31
#######################Options All -Indexes#######################
BLOQUEAR EL ACCESO DE USUARIOS A SU WEB
Si usted requiere denegar acceso a un individuo en particular, y si usted conoce la ip odominio que el individuo usa para conectarse a internet, entonces puedes usar el .htaccesspara bloquearlo desde tu sitio web.
#######################order deny,allowdeny from 123.456.789.000deny from 456.78.90.deny from .aol.comallow from all
#######################
En el ejemplo de arriba, el usuario desde la IP exacta 123.456.789.000 sera bloqueado paraingresar; todos los usuarios dentro de un rango de IP desde 456.78.90.000 to 456.78.90.999seran bloqueado; y todos los usuarios conectados desde aol.com seran bloqueados. cuandoaquellos usuario intenten ingresar a sus sitio web se les mostrara el siguiente mensaje: 403Forbidden error ("Usted no tiene permiso para acceder a este sitio").
REDIRIGIR VISITANTES A NUEVA PGINA O DIRECTORIO
Por ejemplo si usted esta rediseando su web completa, renombrado paginas y directorios.
Los visitantes de las antiguas pginas recibiran el mensaje: 404 File Not Found error, y esto esperjudicial pues puede dar mala imagen a su web y por consiguiente perder trfico ganado.
Asi que para evitar este problema puedes redirigir las llamadas de la antigua pgina a lanueva pgina. Por ejemplo, si su antigua pagina se llamaba pagina_vieja.html y esa pagina hasido reemplaza por pagina_nueva.html, entonces agrega la siguiente linea al archivo.htaccess:
#######################redirect 301 /pagina_vieja.html http://www.sudominio.com/pagina_nueva.html#######################
Por supuesto que debes de remplazar sudominio.com por su actual nombre de dominio. Ahoracuando los visitantes tipeen http://www.sudominio.com/pagina_vieja.html, ellos seranautomticamente redigidos a http://www.sudominio.com/pagina_nueva.html.
Si usted a renombrado un directorio, puede usar una redireccin para afectar a todas laspginas dentro del directorio:
7/21/2019 Gua de HTACCESS.docx
22/31
#######################redirect 301 /directorio_viejo http://www.sudominio.com/directorio_nuevo/#######################
Note que la antigua pgina o directorio es especificado usando la direccin de sistema relativaa su direcctorio www, mientras la nueva pagina o directorio es especificado por la URLabsoluta.
PREVENIR ROBO DE ANCHO DE BANDA BLOQUEANDO EL ACCESODE LAS IMGENES.
Si otro usuario esta robando sus imgenes y por consiguiente su ancho de banda, puedesprevenir esto agregando la siguiente linea en tu archivo .htaccess:
#######################RewriteEngine onRewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?sudominio.com/.*$ [NC]RewriteRule \.(gif|jpg)$ - [F]#######################
Reemplaza sudominio.com con su actual nombre de dominio. Utilizando dicho cdigo susimagenes solo se mostrarn cuando el visitante este navegando en la webhttp://sudominio.com. Si la imagen es llamado desde otras direcciones web, entonces no semostrarn (imgenes con link roto).
Si te sientes particularmente fastidiado por que roban imagenes de tu web, entonces puedesproporcionar una imagen alternativa para las pginas que hacen hotlink de tus imagenes --
Por ejemplo, una imagen que diga "Robar es malo ... visita http://sudominio.com para ver laimagen real que pertenece aqui."Para lograr lo indicado use el siguiente cdigo en su archivo .htaccess:
#######################RewriteEngine onRewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http://(www\.)?sudominio.com/.*$ [NC]RewriteRule \.(gif|jpg)$ http://www.sudominio.com/no_robar.gif [R,L]#######################
Esta vez, reemplace sudominio.com con su actual nombre de dominio, y reemplaceno_robar.gif con el nombre de archivo de la imagen que deseas mostrar en las otras paginasque hacen hotlink a tu imagen.
PREVENIR LA VISUALIZACION DEL ARCHIVO .HTACCESS
Para prevenir que los visitantes puedan visualizar el contenido de tu archivo .htaccess,coloque el siguiente cdigo en el archivo .htaccess
7/21/2019 Gua de HTACCESS.docx
23/31
#######################order allow,denydeny from all#######################
Del mismo modo si necesitas bloquear otro archivo en particular solamente reemplazas elvalor por el nombre de archivo que requieras bloquear
7/21/2019 Gua de HTACCESS.docx
24/31
Un poco de seguridad con htaccessJos Pereira
Jueves, 26 de Mayo de 2011 21:45
Quizs sean pocos los lectores a los que no le suene la potencialidad de htaccess, sin
embargo a menudo solemos infrautilizar todo el potencial que este pequeo archivo de
configuracin puede encerrar.
Htaccess es un contenedor de directivas y reglas que guardado a nivel de directorio de
nuestro proyectos web complementan el archivo de configuracin de Apache.
Uno de los planteamientos mas divertidos de .htaccess es su uso como herramienta de
seguridad, o ms bien de ofuscacin de nuestros archivos y directorios, de manera que
ayude a mantener a mentes curiosas lejos de los archivos y directorios sensibles de
nuestros proyectos.
A menudo cuando se trabaja en la dura realidad de la empresa, donde la productividad
pesa ms que la elegancia, nuestros proyectos web son lanzados no todo lo maduros que
desearamos, por lo que un buen .htaccess puede ahorarnos algun bochorno delante de
nuestros clientes.
A continuacin voy a describir una serie, de tcnicas, que pueden ayudarnos a relajar un
poco la seguridad de nuestras aplicaciones o guardarnos un poco las espaldas, cuanto
usamos cdigo de otras personas.
No voy a entrar demasiado en detalle de las explicaciones de directivas y expresiones ya
que hay suficiente documentacin en la Red sobre ello.Como otros artculos de este site, no pretendo arrojar otro manual mas de htaccess a la
Red, sino mas bien aportar algunas ideas que el lector debe ajustar a sus necesidades y
estrategias.
Activar .htaccess
Para que htaccess sea funcional hay que especificar la directiva en nuestro host virtual:
AllowOverride All
Tambin puede ser que necesites un:
Options +FollowSymLinks
Activar mod_rewriteLa mayora de reglas usan mod_rewrite, ya que se basan en el filtrado del URL y no en
tareas de acceso propiamente a archivos y direcctorios, por tanto debemos disponer de el
http://www.jpereira.net/acerca-de-jpereirahttp://www.jpereira.net/acerca-de-jpereirahttp://twitter.com/home?status=http://www.jpereira.net/web/un-poco-de-seguridad-con-htaccesshttp://www.jpereira.net/acerca-de-jpereira7/21/2019 Gua de HTACCESS.docx
25/31
en nuestro servidor.
Si usamos un hosting publico, habr que comprobar que esta soportado. Si administramos
nuestro propio hosting basta con un:
a2enmod rewrite
Para familiarizarte en profundidad con mod_rewrite visita sudocumentacin oficial.
Algunas reglas de seguridad para el htaccess interesantes:
Inyecciones SQL
Una de las pesadillas ms antiguas de las vulnerabilidades web son las inyecciones sql.
Mediante la inyeccin de fragmentos de cdigo SQL en los valores de nuestras variables:
mipass= OR ''='
miuser=' AND 0 UNION SELECT 1 AND 'l'='
A veces se pueden conseguir algunos resultados divertidos. El uso del siguiente conjuntode reglas nos ayudar a filtrar la mayora de estas situaciones:
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]
Bloqueo de agentes y utilidades de lnea de comandos
Algunas herramientas de bsqueda y explotacin de vulnerabilidades o los conocidos
downloaders poseen agentes particulares y fciles de detectar como: wget, curl, java,
HTTrack, perl, java, etc
Si por ejemplo hacemos en nuestra terminal un:
wget www.miweb.com/index.php
Obtendremos un Peticin HTTP enviada, esperando respuesta... 403 Forbidden siempre y
cuando tengamos este cdigo en nuestro .htacces:
RewriteCond %{HTTP_USER_AGENT} $ [OR]
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.htmlhttp://httpd.apache.org/docs/1.3/mod/mod_rewrite.htmlhttp://httpd.apache.org/docs/1.3/mod/mod_rewrite.htmlhttp://httpd.apache.org/docs/1.3/mod/mod_rewrite.html7/21/2019 Gua de HTACCESS.docx
26/31
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]
Inclusin de archivos remotos RFI) y compaa
Mediante las tcnicas de XSS o RFI se incluye en nuestra web un script albergado en otra
URL, normalemente una web anfitriona que ya fue atacada previamente, que va a servir
para alterar el comportamiento de nuestra aplicacin y probablemente servir de puerta de
entrada para algn backdoor o shell:
miVariable=http://urlatacante.com/shell.php
Las siguientes reglas nos van ayudar a minimizar este tipo de situaciones o la navegacinde directorios desde la url:
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]
Bloqueo de acceso a directorios:
Quizs una de las reglas mas curiosas es simplemente evitar que el usuario pueda acceder
directamente al rbol de directorios directamente desde la url:
RewriteRule (cache|includes|logs|tmp)/ - [F]
Gracias a esta sentencia obtendremos un Forbiden si hacemos un:
http://www.miweb.com/cache
Bloquear el acceso a determinados archivos
Una tcnica un poco mas refinada que la anterior. Se basa en la posibilidad de restringir el
acceso directo a ciertos archivos de nuestra web en funcin de su extensin: php, xml, tpl,
etc
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} \.php|\.ini|\.xml [NC]
RewriteCond %{REQUEST_URI} \/library\/ [OR]
7/21/2019 Gua de HTACCESS.docx
27/31
RewriteCond %{REQUEST_URI} \/images\/ [OR]
RewriteCond %{REQUEST_URI} \/cache\/
RewriteRule (.*)$ index.php [R=404]
As de esta forma si hacemos un:
http://www.miweb.es/library/index.php
http://www.miweb.es/cache/rss.xml
Vamos obtener un 404 Not Found. Fjate que donde antes hacamos [F] de forbiden
ahora con [R=404] arrojamos un 404 o cualquier otro error, una tcnica interesante para
"despistar".
Proteccin por contrasea de direcctorios
Un clsico de la proteccin de directorios con .htaccess es la proteccin mediante
contrasea. Esta tcnica es interesante para reforzar la autenciacin de paneles de controlo formularios de autenticacin.
Para proteger con contrasea un directorio basta con crear un .htaccess en dicho
directorio con el siguiente cdigo
AuthName "Introduce Tus Datos:"
AuthType Basic
AuthUserFile /www/miweb/.htpasswd
AuthGroupFile /dev/null
Require valid-user
En la directiva AuthUserFile deberemos colocar la ruta de nuestro archivo de passwords.
Hay abundante documentacin sobre la creacin de los passwords de htpasswd. Por
ejemplo desde una terminal podemos teclear:
htpasswd -nb usuario contrasea
Nos arrojar el contenido de nuesto archivo de passwords:
usuario:ECiz4oJ8cryR6
El archivo .htpasswd puede denominarse con cualquier otro nombre y debe colocarse
fuera de cualquier ruta pblica, y de ser posible fuera del open_basedir del PHP.
Tienes la documentacin sobre lacreacin de passwordspara htpasswd.
Proteccin de directorios por IP
El tema de la proteccin con contrasea esta bien, pero es engorroso tener que memorizar
dichas contraseas. Si accedemos siempre a nuestras web desde la misma ubicacin,
http://httpd.apache.org/docs/2.0/programs/htpasswd.htmlhttp://httpd.apache.org/docs/2.0/programs/htpasswd.htmlhttp://httpd.apache.org/docs/2.0/programs/htpasswd.htmlhttp://httpd.apache.org/docs/2.0/programs/htpasswd.html7/21/2019 Gua de HTACCESS.docx
28/31
quizs sea interesante una proteccin por IP o rango de IP.
Para ello podemos usar por ejemplo:
Deny from all
Allow from 83.165.114.0
Satisfy any
Este ejemplo es vlido si tenemos una ip fija. Sin embargo si lo que nos interesa mas que
proteger un directorio es ofuscarlo para sacarnos de encima un porcentaje amplio de
fisgones, podemos autorizar el acceso para un determinado rango. Podemos ver que IPs
publicas se nos asignan comnmente y abrir nuestro directorio para ese rango, por
ejemplo:
Deny from all
Allow from 83.165
Satisfy any
De esta forma estamos dando acceso a todo el rango 83.165.xxx.xxx
Esta tcnica se puede combinar con la anterior para evitar tener que introducir la
contrasea desde ciertas conexiones:
AuthName Tu panel
AuthType Basic
AuthUserFile /www/miweb/.htpasswd
AuthGroupFile /dev/null
Require valid-user
Deny from allAllow from 192.168.0
Satisfy any
La directiva Satisfy anynos indica que tenemos que cumplir una de las dos condiciones,
si ussemos Satisfy All debemos cumplir las dos condiciones.
Otro uso bastante interesante de las directivas Allow o Deny es poder limitar el acceso de
usuarios por pas.
En paginas como estawww.ipaddresslocation.orgpodemos obtener el rango de IPs de un
pas para permitirlo o denegarlo. Esta tcnica sencilla de implementar nos ahorra
bastantes curiosos entre nuestros archivos, ya que la mayora de intrusos provienen delextranjero.
Al final de esta web teneis un htacces para restringir el acceso slo a visitantes que se
conecten desde Espaa.
Manejo de errores
http://httpd.apache.org/docs/current/mod/core.htmlhttp://httpd.apache.org/docs/current/mod/core.htmlhttp://httpd.apache.org/docs/current/mod/core.htmlhttp://www.ipaddresslocation.org/http://www.ipaddresslocation.org/http://www.ipaddresslocation.org/http://www.ipaddresslocation.org/http://httpd.apache.org/docs/current/mod/core.html7/21/2019 Gua de HTACCESS.docx
29/31
Administrar correctamente los errores generados por nuestra web es una til tcnica de
ofuscar la estructura de nuestras web. De los errores que arroja una web se puede
aprender mucho, si un directorio existe aunque este prohibido su acceso, si determinado
mtodo esta o no habilitado, etc,... Ocultar, ofuscar, confundir, etc personalizando
nuestros errores mas frecuentes es una divetida tcnica de seguridad.
Por ejemplo con:
ErrorDocument 404 http://www.misitio.com
Redirigiremos al usuario a la pgina principal de nuestro dominio sin dar mas
explicaciones. Sin embargo esta tcnica si la aplicamos en subdirectorios nos puede
servir, sin embargo si la usamos en el root de nuestro sitio, acabar redireccionandose a si
misma, generando un error en el explorador.
Con esto:
ErrorDocument 404 /errores/errorgenerico.php
Redirigiremos al visitante a una pgina, indicando que ha habido un error pero sin decir
cual. Es una forma elegante de solucionar la situacin.
Si no queremos complicarnos tambin se puede solucionar as:
ErrorDocument 404 Ups! Se ha producido un error
ErrorDocument 403 Ups! Se ha producido un error
ErrorDocument 400 Ups! Se ha producido un error
ErrorDocument 406 Ups! Se ha producido un errorErrorDocument 412 Ups! Se ha producido un error
ErrorDocument 416 Ups! Se ha producido un error
ErrorDocument 501 Ups! Se ha producido un error
ErrorDocument 401 Ups! Se ha producido un error
ErrorDocument 500 Ups! Se ha producido un error
Cuando se produce un error que no hemos controlado, tambin se volcar la firma del
explorador: versin, mdulos, sistema operativo, etc,... esta informacin es igualmente
til para conocer posibles vulnerabilidades del mismo. Dicha situacin se puede evitar con
un simple:
ServerSignature Off
Restringir acceso a determinados archivos
7/21/2019 Gua de HTACCESS.docx
30/31
A veces puede ser interesante denegar cualquier acceso a determinados ficheros. Las
directivas Files y FilesMach permiten a travs de expresiones regulares controlar el acceso
a determinados archivos o directorios. Por ejemplo:
Order allow,deny
Deny from all
Satisfy all
Bloquea cualquier acceso a un fichero que termine con la extensin .old
De forma similar:
Order allow,deny
Deny from all
Satisfy all
Bloquear el acceso a cualquier fichero o directorio que empiece por una barra baja _
Exploracin de directorios.
Hoy en da la mayora de hostings ya lo traen correctamente configurado, pero la
posibilidad de listar el contenido de nuestros directorios, no suele ser una buena opcin
salvo que sea intencionada.
La exploracin de directorios se puede evitar con un simple index.html o index.php pordirectorio, pero lo mas elegante es un:
Options -Indexes
Conclusiones
Estas son algunas propuestas, que combinadas de forma oportuna pueden ayudarnos,
quizs no, a blindar nuestra web, sino ms bien a borrar las mximas evidencias posibles
que puedan dar indicios, a los usuarios ms curiosos, de posibles vulnerabilidades en
nuestro sitio.
7/21/2019 Gua de HTACCESS.docx
31/31