to top

Cómo restringir el acceso con htaccess y php

Problema: No queremos usuarios apache

Algunas veces nos encontramos que queremos restringir el acceso a documentos de una carpeta de forma que solo unos usuarios puedan acceder a ellos, independientemente si están validados y usando nuestra aplicación o están accediendo de forma directa al archivo mediante una url.

Podríamos restringir el acceso mediante usuarios de apache, pero nosotros queremos almacenar usuarios y contraseñas desde la gestión de nuestra aplicación web.

Solución: Combinar php con htaccess

En nuestro fichero .htaccess  añadimos las siguientes lineas:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^\/(ruta a la carpeta)\/.*$
RewriteRule !^((.*.php)|(.*\/))$ acceso.php

En el fichero «acceso.php» es donde programamos la validación. Según cada caso validaremos que tengamos la sesión activa, la cookie, conectaremos con la base de datos, solicitaremos usuario o contraseña, etc, etc. Cada cual que haga lo que necesite, pero para mostrar el contenido, si la validación es la correcta, necesitaremos el siguiente código:

if($tengoacceso){
 // COMPRUEBO QUE EL FICHERO EXISTE
 if(file_exists($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'])){
 // OBTENGO EL CONTENIDO DEL FICHERO
 $fp = fopen($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], 'r');
 // OBTENGO EL MIME Y DEFINO EL HEADER DEL CONTENIDO QUE VOY A LANZAR
 header('Content-type: '.mime_content_type($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']));
 // LO ENVIO AL NAVEGADOR Y LISTO
 fpassthru($fp);
 fclose($fp);
 }else{
 // NO SE HA ENCONTRADO EL FICHERO -> SUGERENCIA: REDIRIGE A UN 404
 header("http://www........")
 }
}else{
 // NO TENGO ACCESO -> SUGERENCIA: REDIRIGE A UNA PAGINA DE ERROR
 header("http://www........");
}

Ya está todo. Con esos dos sencillos pasos podemos tener nuestro contenido bien protegido.

Deja un comentario