Base de Conocimientos
|
.htaccess
Escrito por Private IP Services on 21 March 2007 02:49 PM
|
|
|
1 .htaccess Los ficheros .htaccess son archivos de texto que contienen directivas con las que se pueden modificar el funcionamiento del servidor web. Su ámbito de aplicación se restringe al directorio en el que se encuentran y a los subdirectorios que penden del él, razón por la que se denominan ficheros de configuración distribuidos. Con ellos se pueden conseguir objetivos tan variados como pueden ser limitar el acceso a determinados usuarios, o retornar una página u otra dependiendo del navegador utilizado. Estos ficheros fueron definidos originalmente por el servidor web Apache, por lo que hoy en día pueden considerarse un estándar. Trabajar con ellos es fácil, basta con crearlos con un editor de texto y copiarlos al directorio deseado del servidor web. El mayor inconveniente que presentan es la nomenclatura de las directivas, que resulta un tanto críptica. Los ejemplos utilizarán una nomenclatura genérica, como www.dominio.com o W.X.Y.Z, siendo necesario cambiar estos parámetros por los valores adecuados para poder utilizarlos en un sitio web. 1.1 Evitar que pueda listarse el contenido de los directorios Cuando se solicita a un servidor de páginas web una URL del tipo www.dominio.com/directorio, el servidor busca normalmente en el directorio solicitado un fichero que tenga por nombre index.html, index.php, index.cgi, o con cualquier otra extensión que tenga configurada. Si lo encuentra lo retorna, pero si no lo encuentra retorna una página HTML con una lista de enlaces a todos los archivos y carpetas del directorio, permitiendo navegar entre ellos. Este comportamiento no deseado puede evitarse añadiendo la siguiente línea al fichero .htaccess: Options -Indexes 1.2 Denegar el acceso desde ciertas direcciones IP Con .htaccess se puede impedir el acceso desde determinadas direcciones IP o dominios a nuestra web. Por ejemplo, añadiendo las siguientes líneas a .htaccess se denegaría el acceso desde la IP W.X.Y.Z a nuestra web: order allow, deny deny from W.X.Y.Z allow from all También es posible denegar el acceso a un rango de direcciones IP, omitiendo los últimos números, o a un dominio concreto, escribiéndolo sin más en el fichero: order allow,deny deny from W.X.Y. deny from www.dominio.com allow from all 1.3 Limitar los tipos de ficheros que pueden subirse a un directorio Cuando se permite que los usuarios de una web suban ficheros a la misma, generalmente se quiere limitar el tipo de ficheros que pueden subir. Por ejemplo, si se quiere que sólo se puedan subir ficheros con extensión .html, .htm o .shtml, y que no se pueda ejecutar código PHP dentro de los mismos, bastaría con poner un fichero .htaccess en el directorio donde los usuarios dejan sus ficheros con las siguientes líneas: php_value engine off AddType text/plain .htm .html .shtml 1.4 Redirigir contenido Cuando se realiza una actualización o migración de software, las nuevas versiones de los programas se suelen ubicar en un directorio distinto al del software actual. Se puede utilizar .htaccess para permitir que la web siga siendo accesible a través de las mismas rutas con las que se venían haciendo hasta entonces, redirigiendo las páginas a su nueva ubicación. Las siguientes líneas de ejemplo muestran como redirigir todas las solicitudes del contenido de un sitio a un directorio nuevo: Redirect / /nuevo/ El primer argumento representa la URL que se quiere redirigir, la raíz del sitio en este ejemplo, y el segundo argumento el nuevo destino de las solicitudes, que debe ser una ruta válida. 1.5 Proteger directorios con un usuario y una clave Para proteger un directorio con un usuario y una clave, además de .htaccess, se necesita crear un fichero de nombre .htpasswd. En este último fichero se incluirán los nombres de los usuarios y las claves correspondientes a cada uno de ellos. El fichero .htpasswd es un fichero de texto, pero para crearlo se necesita la ayuda del programa htpasswd para codificar las claves de los usuarios. Esta aplicación se ejecuta desde línea de comandos, admite como entrada una cadena de texto, y devuelve como salida la misma cadena de texto introducida pero codificada. Ejemplo de uso: htpasswd -nb usuario1 clave1 usuario1:GnmqRZUopLvqg htpasswd ?nb usuario2 clave2 usuario2:k2BouslYiRIo. Los nombres de los usuarios y las claves codificadas deben colocarse en el fichero .htpasswd, en una línea cada uno, separados por dos puntos, como en el ejemplo siguiente: usuario1:GnmqRZUopLvqg usuario2:k2BouslYiRIo. El fichero .htpasswd generado se debe copiar al servidor web, y dentro del fichero .htaccess del directorio que se quiere proteger, se deben poner las siguientes directivas: AuthUserFile /directorio/.htpasswd AuthName "Protegido" AuthType basic require valid-user La primera línea indica la ruta completa donde se encuentra el fichero .htpasswd, la segunda asigna un nombre al recurso que se está protegiendo, la tercera indica el tipo de protección a aplicar, y la cuarta los usuarios que pueden acceder al directorio, en este caso todos los que figuran en el fichero de claves. Existen más posibilidades que merecen la pena investigar, como limitar el acceso a sólo algunos de los usuarios que aparecen en el fichero de claves, y no a todos. Por ejemplo, con las siguientes líneas se daría acceso sólo a los usuarios "administrador" y "avanzado": require administrador avanzado 1.6 Evitar el Hot Linking "Hot Linking" es el nombre con el que se conoce la práctica de poner enlaces a recursos desde una página web a otra. El uso más común es el de poner en una web un enlace a una imagen de otra web, evitando así tenerla almacenada localmente en el servidor donde se pone el enlace. El problema de esta práctica es que provoca un consumo del ancho de banda por parte del servidor en el que reside la imagen. Un ancho de banda que paga el propietario de la web en la que reside la imagen, no el que la enlaza. Con .htaccess se puede evitar el Hot Linking, ya sea redirigiendo el enlace a otro recurso, como una imagen que contenga un mensaje de aviso, o provocando directamente un error de acceso denegado. En el ejemplo que se expone a continuación se muestran las directivas necesarias para capturar las peticiones de imágenes de tipo png y jpg, y generar un error de acceso denegado. RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?dominio.com/.*$ [NC] RewriteRule \.(png|jpg)$ - [F] 1.7 Contenido dependiente del Navegador Con .htaccess también se puede forzar a que el servidor web despache una página u otra dependiendo del navegador (agente) que realiza la petición. Para redirigir el contenido en función del navegador se puede utilizar el valor de "User-Agent" que aparece en la cabecera HTTP de las peticiones, y con el que normalmente se identifica el navegador. Por ejemplo, las siguientes líneas colocadas en un fichero .htaccess harían que cuando un agente solicitará la página index.html se le sirviese la página index.opera.html si se identifica como "Opera/*", la página index.mozilla.html si se identifica como "Mozilla/*" y la página index.html en cualquier otro caso. 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] Los asteriscos en las expresiones regulares de las directivas casan con cualquier cadena de texto. Y en este caso en concreto se utilizan para redirigir el contenido dependiendo del nombre del agente sin tener en cuenta la versión, que suele indicarse a continuación de la barra, como "Mozilla/3.0", "Mozilla/4.0", "Mozilla/5.0", ? 1.8 Denegar el acceso a determinados robots No todos los robots que visitan una web lo hacen con el propósito de indexar el contenido, hay algunos que lo hacen, por ejemplo, para extraer direcciones de correo a las que enviar spam. También ocurre que algunos robots están mal programados, realizando demasiadas peticiones en muy poco tiempo, y ralentizando así el acceso del resto de visitantes de la web. Otro problema añadido es que los robots suelen ser muy intrusivos, no limitándose a visitar las páginas web, sino adentrándose también en todos los directorios del servidor. Con el fin de controlar el comportamiento de los robots y restringir el contenido al que pueden acceder, se creó un protocolo de exclusión de robots. Este protocolo se basa en colocar en el directorio raíz del sitio un fichero de texto, de nombre robots.txt, con una serie de directivas que los robots visitantes deberían seguir. Y aunque en la actualidad muchos robots se adhieren a este protocolo, el problema de robots.txt es que las directivas que contienen son interpretadas como recomendaciones, no como obligaciones, por lo que en la práctica no resulta de mucha utilidad. Con .htaccess se puede instruir al servidor web para que deniegue el acceso de un robot determinado a un directorio concreto. Por ejemplo, con las siguientes líneas se evitaría el acceso de un robot determinado, en cualquiera de sus versiones, al contenido de un directorio con información privada: RewriteCond %{HTTP_USER_AGENT} ^robot.* RewriteRule ^/privado/.+ - [F] Como medida adicional se podría denegar además el acceso a un rango determinado de direcciones IP desde las que procedan las visitas de los robots no deseados. 1.9 Formato de Directivas Llegado a este punto, si se han seguido los ejemplos, es fácil percatarse que la sintaxis de las directivas de .htaccess es un tanto críptica. De forma muy general, se puede decir que las directivas se componen de tres partes. Una primera parte que indica el tipo de directiva, mediante el uso de una palabra reservada como Options o RewriteCond. Una segunda parte en la que se indican los parámetros adecuados a la directiva. Y una tercera parte, al final de cada línea, en la que figuran modificadores o acciones adicionales. Los parámetros por lo general se indican en forma de expresión regular para hacer la directiva muy genérica. Las expresiones regulares son patrones de cadenas de textos que se definen utilizando símbolos como el de oclusión (^) para indicar el inicio, el del dólar ($) para señalar el final, el cierre de interrogación (?) para un carácter opcional, el asterisco (*) para varios caracteres opcionales, y así sucesivamente. Los valores que aparecen entre corchetes al final de cada línea son modificadores o acciones. Por ejemplo, para RewriteCond se puede utilizar [NC] para indicar que en la directiva no debe distinguirse entre mayúsculas y minúsculas (no case), u [OR] para indicar que la expresión actual debe interpretase como una alternativa a la anterior en vez de tomarse como un [AND], que es el valor por defecto. Por su parte, RewriteRule admite otros modificadores propios, como [F] para forzar un acceso denegado (forbidden), o [L] para indicar que es la última regla que debe aplicarse (last rule). 1.9 Archivo por defecto en la carpeta DirectoryIndex archivo.html | |
|
|
|
Comentarios (0)
