27 enero 2013

Sobre el .htaccess y .htpasswd en Apache2

¿Qué es un fichero .htaccess?

Un fichero .htaccess es un simple fichero de texto. Permite modificar el comportamiento del servidor de web creando configuraciones específicas para su dominio. Algunos de los usos más frecuentes son la protección de directorios, páginas personalizadas de error, etc.

¿Dónde debo guardar el fichero .htaccess?

Puede guardarse en el directorio principal de su sitio web o en subdirectorios. Si coloca un .htaccess en el directorio principal este afectará a toda la estructura de subdirectorios de su web.

¿Cómo puedo crear un fichero .htaccess?

Para crear un fichero .htaccess no necesitas nada especial, únicamente un editor de textos, cómo por ejemplo el Notepad de Windows o Vi en Linux.

Ahora que ya sabemos como crear el fichero, observarás que este fichero no dispone de un nombre convencional. Si tienes algún problema relacionado con el nombre, puedes guardarlo como "htaccess.txt" o simplemente “htaccess”. Una vez guardado, sube el fichero al servidor, y renombra el fichero utilizando el cliente FTP. Recuerda que el nombre que debe tener este fichero en el servidor es, “ .htaccess “ para que cumpla su función.

¿.htaccess requiere algún permiso especial?

No necesariamente, pero 644 ó (RW- R-- R--) no estría mal.

Podemos redireccionar a nuestros visitantes a diferentes páginas si se produce un error.

La sintaxis que debe utilizar es la siguiente: ErrorDocument código_error /nombre_fichero.html

Los código de error más usados son:

  • 400 Bad Request Petición errónea
  • 401 Authorization Required Autorización requerida. Se muestra cuando un usuario intenta acceder a una zona protegida sin autorización.
  • 403 Forbidden Acceso denegado. Se muestra cuando un usuario intenta acceder a una zona a la que no tiene permisos.
  • 404 Not Found Uno de los errores más comunes. Se muestra cuando una página no existe en el servidor. Resulta muy útil para mostrar información al usuario de lo que ocurre exactamente.
  • 500 Internal Server Error Se muestra cuando se ha producido un error interno en el servidor. Normalmente por un error en la ejecución de scripts CGI.

La protección de directorios es una de las funciones más usadas de .htaccess.

Primer Paso

Lo primero que debemos hacer es crear un fichero llamado .htpasswd. Este fichero contendrá los nombres de usuario y contraseñas del área restringida que deseamos crear. La información debe ser creada de la siguiente manera. Un usuario y contraseña por línea ...

usuario1:password1
usuario2:password2
usuario3:password3

El nombre de usuario debe estar separado de la clave por dos puntos (:). También debemos tener cuidado de no dejar espacios en blanco, ya que esto provocaría un error en la autenticación.

Importante: Los passwords obligatoriamente deben estar encriptados. Para realizar esto existen muchos métodos y herramientas que no voy a describir ahora.

Segundo Paso

Una vez creado el fichero con los usuarios y contraseñas, debemos crear el .htaccess

AuthUserFile /home/pathto/.htpasswd AuthType Basic AuthName "Restringido" require valid-user

AuthUserFile /home/ruta_usuario/htdocs/.htpasswd - Esta línea indica la ruta hacia el fichero .htpasswd. La ruta debe ser correcta para que la autenticación pueda llevarse a cabo. Una vez creado el fichero, lo enviamos al directorio que queremos proteger.

A través de .htaccess puedes denegar el acceso a determinadas direcciones IP.

La sintaxis que debes utilizar es ...

order allow,deny deny from dirección_ip allow from all

También es posible denegar el acceso utilizando nombres de dominio en lugar de IP's.

order allow,deny deny from .dominio.com allow from all

Para cambiar la página de inicio de nuestro dominio

DirectoryIndex inicio.html

También podemos especificar varias

DirectoryIndex inicio.html index.html index.htm index.php default.html

Redireccionar el tráfico hacia una nueva localización.

Redirect /viejo_directorio/fichero_antiguo.html http://www.dominio.com/nuevo_directorio/index.html

Listar el contenido de un directorio (no prefijar página de inicio)

Options +Indexes

Para desactivar los listados, es decir, o muestras página de inicio o nada

IndexIgnore *

Para mostrar los listados en el servidor, pero evitando mostrar por ejemplo imágenes

IndexIgnore *.gif *.jpg

Debemos tener en cuenta que listar los archivos de un directorio podría considerarse como un problema de seguridad.

Para añadir un especificación de archivo concreta (MIME) al servidor

AddType mime-type extension
Ejemplo:
AddType application/x-shockwave-flash swf

Otras cuestiones

Aunque ya la mayoría de los proveedores de Hosting permiten mediante una configuración en el panel de control hacer lo que viene a continuación no está mal tenerlo en cuenta por si algún día hay que hacerlo a mano

Ejemplo para denegar la carga externa de imágenes (HotLink)

RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?midominio.com/.*$ [NC] RewriteRule \.(gif|jpg)$ - [F]

Otra opción que podemos utilizar es denegar la carga externa, pero mostrando una imagen por defecto

RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?midominio.com/.*$ [NC] RewriteRule \.(gif|jpg)$http://www.midominio.com/imagen.gif [R,L]

1 comentario:

  1. Me falla la directriz (require valid-user) y se por qué. Le he dado mil vueltas y he buscado en internet, pero nada.
    Me sale un error 500

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.