Ver índice
Protección de directorios

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Errores y redireccionamiento

Configuración del servidor Apache

Para poder proteger de directorios –mediante un fichero llamado .htaccess– es necesario realizar algunas modificaciones en la configuración de Apache. Abriremos nuestro fichero httpd.conf y buscaremos las líneas en las que aparece: AllowOverride None y reemplazaremos None por All. Guardaremos los cambios en httpd.conf y reiniciaremos el servidor.

En caso de que estemos usando como sistema operativo Ubuntu haremos esa modificación ejecutando desde consola:

sudo gedit /etc/apache2/sites-enabled/000-default

El fichero .htaccess

Las misiones más importantes que puede realizar este fichero son: redireccionar y restringir accesos. Veamos el primero de los casos. Los mensajes de error más frecuentes al intentar acceder a páginas web –y sus causas– son los siguientes:

Los errores de los tipos 403 y 404 suelen producirse en la mayoría de las ocasiones por direcciones incorrectas y –aparte de causar un pésimo efecto– suelen provocar el abandono de la visita.

Un fichero .htaccess con este contenido:

          ErrorDocument 401 pagX
          ErrorDocument 403 pagY
          ErrorDocument 404 pagZ

donde pagX, pagY y pagZ sean direcciones (completas) de las páginas a las que deseamos redireccionar el navegador, conseguiría que esos errores llevaran al visitante a la página que nosotros deseáramos.

Intenta acceder a una dirección inexistente del tipo: http://localhost/noexisto.php y verás que aparece un mensaje de error advirtiendo que no existe ninguna página con ese nombre. Algo lógico, porque realmente no existe.

Bastará con que abras tu editor –no utilices el block de notas porque te dará muchísimos problemas en este caso– escribas una línea como esta

    ErrorDocument 404 http://www.rinconastur.net

y guardes el documento en el raiz de tu servidor con el nombre .htaccess (aunque te parezca extraño, no lleva nada delante del punto).

Reinicia el servidor, prueba nuevamente a acceder de nuevo a http://localhost/noexisto.php y observarás que ahora no dice página no encontrada sino que se abre la página principal del este dominio.

Edita de nuevo el fichero .htaccess y añádele las siguientes líneas:

    ErrorDocument 401 http://www.rinconastur.net
    ErrorDocument 403 http://www.rinconastur.net

guarda los cambios, reinicia tu servidor y comprueba que cada vez que intentes acceder a una dirección inexistente te ocurre lo mismo que al pulsar aquí: http://rinconastur.net/noexisto.php. Como es lógico puedes redireccionar cada uno de los errores a una página distinta y, desde luego, no necesariamente a la mía. ;-)

Herencias

El archivo .htaccess provoca herencia. Eso significa que las especificaciones incluidas en un directorio –sean restricciones o redirecciones– son efectivas en todos los subdirectorios que contiene, incluso en el caso de que esos subdirectorios tengan su propio .htaccess y que en él se establezcan condiciones distintas a las anteriores.

Al crear un fichero .htaccess las condiciones establecidas afectarán a todos sus subdirectorios. Por esa razón cuando pretendemos que desde subdirectorios distintos se redireccione a páginas distintas tendremos que incluir un .htaccess en cada uno de ellos y no poner ningún .htaccess en el directorio raíz que los contenga.

Protección de directorios

Son muchas las posibilidades que ofrece .htaccess a la hora de restringir el acceso a un directorio determinado. Entre otras opciones, se puede denegar el acceso a todos los usuarios; denegar el acceso con excepciones, autorizar a todos (equivale a no restringir), autorizar con excepciones o requerir clave y contraseña.

Lo que hemos denominado excepciones también permite una serie de alternativas tales como: una IP determinada, un rango de IP's, nombres de dominio, etcétera. Sólo comentaremos la forma de protección de directorios mediante claves de usuario y contraseña.

Restricción de acceso a usuarios no autorizados

Este tipo de protección requiere crear un fichero de claves y contraseñas y configurar de forma adecuada .htaccess

Contraseñas sin encriptar

Para crear un fichero de claves y contraseñas basta con abrir el block de notas y escribir la clave seguida de dos puntos (:) y a continuación escribir la contraseña. Podemos poner tantas como deseemos sin más limitaciones que escribir cada bloque clave:contraseña en una línea distinta. Este puede ser un ejemplo:

pepe:Pepito
pepa:Pepita

Podemos guardar este fichero en el sitio que deseemos sin que sea necesario que pertenezca al root del servidor que es la opción más aconsejable. Podemos ponerle cualquier nombre sin que importe que tenga extensión o no la tenga.

Contraseñas encriptadas

Apache dispone de una utilidad que permite la creación de ficheros de claves con contraseñas encriptadas. Se trata de un programa llamado htpasswd.exe que está en el subdirectorio bin del servidor.

Para crear un nuevo fichero el procedimiento sería el siguiente

– En la línea de comandos: Inicio->Ejecutar


debemos escribir:
path htpasswd -c nombre y path del fichero de claves usuario

si se trata de un sistema operativo Linux Ubuntu habría que escribir en la consola

htpasswd -c nombre y path del fichero de claves usuario

En nuestra configuración y para crear un fichero con la palabra clave pepe escribiríamos:

htpasswd -c /home/rinconas/seguridad/misclaves.txt pepe

y aparecería una ventana de MS-DOS en la que deberemos escribir la password para ese usuario.


Añadir usuarios a un fichero de contraseñas encriptadas

Porcederíamos de la misma forma. Volveríamos a ejecutar htpasswd con la nueva clave pero sin utilizar -c.

  ¡Cuidado!  

El modificador -c destruiría el fichero anterior, si existiera y crearía uno nuevo.

    El proceso ahora sería:


htpasswd /home/rinconas/seguridad/misclaves.txt luis

Habríamos creado así nuestro fichero con claves encriptadas. Si pretendiéramos visualizarlo nos aparecería lo siguiente:

   pepe:$apr1$EC4.....$7Z3.p2tv2QpzrZbo4bI2j0
   luis:$apr1$SU4.....$iU8a.YTo.ZvYyRggDAvTC.

  ¡Cuidado!  

Bajo Linux, antes de añadir el usuario luis tendríamos que asegurarnos de que el fichero misclaves.txt tenga permisos para poder efectuar modificaciones en su contenido.

Configuración de .htaccess

Para el caso específico de nuestro servidor Apache, el fichero .htaccess ha de contener:

Con nuestra configuración de Apache no es necesario especificar en .htaccess la forma de encriptación de contraseñas. El propio servidor interpreta el contenido del fichero y aplica u omite los criterios de encriptación.

A riesgo de parecerte pesados tenemos que volver a insistir que no todos los hosting tienen habilitada esta opción, pero además hemos de hacer mención a otro detalle muy importante. La configuración que hemos comentado no es válida para todos los servidores. Según como esté configurado el servidor, la versión del software que utilice, etcétera no sería extraño que se necesitara esta otra sintaxis: AuthType Basic, AuthName "Texto", AuthTextUserFile fichero, required valid-user, AuthTextCrypt On/Off u otras similares que pueden inducirnos al error. Lo mejor, en caso de servidores ajenos, es consultar al administrador del sistema sobre estos aspectos y recabarle detalles sobre la sintaxis específica de su configuración.

Un ejemplo de .htaccess

Supongamos que tenemos un directorio llamado protegido en cualquier parte del servidor (por ejemplo dentro de htdocs). La forma de protegerlo sería crear un fichero con nombre .htaccess con un contenido como este:

AuthType Basic
AuthName "Pruebas de autentificación"
AuthUserFile "c:/Apache/seguridad/misclaves.txt"
require valid-user

y guardarlo en el directorio que hayas especificado en lugar de lo escrito en rojo en el recuadro anterior. Al acceder al directorio protegido aparecerá una ventana como esta:


y si al cabo de tres intentos no escribimos la clave y contraseña adecuadas se producirá un Error 401.

Una vez que tengamos modificada la configuración del servidor Apache estaremos en condiciones de poder proteger directorios –restringir o limitar el acceso a ellos– y también podremos redirigir peticiones a páginas predeterminadas en casos concretos. Este control ha de realizarse mediante ficheros que tienen por nombre .htaccess (el primer caracter es el punto), que no pueden llevar ningún tipo de extensión y que pueden ser incluidos en cualquier directorio o subdirectorio del espacio del servidor.

  ¡Cuidado!  

Existen otras opciones de protección de acceso a directorios. Algunas guardan la lista de usuarios autorizados en una base de datos y otras requieren que el usuario disponga de un certificado digital. En el epígrafe Servidores seguros tienes información al respecto.