Denegar acceso a archivos de un servidor mediante URL PHP [SOLUCIONADO]

Protegiendo Archivos Sensibles en tu Aplicación PHP

La seguridad es un elemento crítico en el desarrollo de aplicaciones web. Proteger la información sensible de tu aplicación no solo consiste en salvaguardar datos personales o de negocio, sino también en restringir el acceso a archivos que pueden ser manipulados si caen en manos equivocadas. En PHP, existen distintas estrategias para evitar que ciertos archivos sean accesibles desde la URL, y es vital conocer e implementarlas correctamente.

Configuración de .htaccess para Restringir Acceso

Una de las primeras líneas de defensa es la configuración del archivo .htaccess, común en servidores que corren Apache. Con unas simples instrucciones, podemos negar el acceso a directorios completos o a tipos específicos de archivos. Veamos cómo hacerlo.

Negación de Acceso a un Directorio Completo

Supongamos que queremos que nadie acceda a nuestro directorio “privado”. En este directorio, puedes colocar todos aquellos scripts o archivos que no deseas que sean directamente accesibles desde el navegador. A continuación, el código que deberías agregar a tu .htaccess ubicado en dicho directorio:

    Order deny,allow
    Deny from all
    

Evitar el Acceso a Tipos de Archivos Específicos

Si lo que buscas es denegar el acceso a ciertos tipos de archivos como `.inc`, `.phps`, `.log`, etc., puedes hacerlo añadiendo las siguientes líneas en tu archivo .htaccess:

    
    Order allow,deny
    Deny from all
    
    

Protección a Nivel de Código PHP

Las directivas en .htaccess son muy efectivas, pero ¿qué sucede si tu servidor no utiliza Apache o no tienes permitido modificar el .htaccess? En ese caso, puedes emplear mecanismos de seguridad PHP para denegar el acceso. Veamos algunas técnicas.

Denegación de Acceso Directo a los Archivos PHP

A veces, simplemente quieres evitar que tus archivos PHP sean cargados directamente desde la URL. Esto es posible al definir una constante en tu archivo de entrada (por ejemplo, index.php) y luego verificar esa constante en el resto de tus scripts.

En tu index.php podrías definir lo siguiente:

    define('ACCESS_ALLOWED', true);
    

Luego, al inicio de cada uno de tus archivos PHP, agregarías:

    if(!defined('ACCESS_ALLOWED')) {
        exit('Access Denied.');
    }
    

Restricción de Acceso a Archivos de Configuración

Los archivos de configuración o aquellos que contienen constantes y variables importantes, normalmente llamados config.php o settings.php, son un blanco frecuente de ataques. Puedes prevenir que estos sean accesibles directamente mediante la siguiente práctica:

    if(count(get_included_files()) == 1){
        header('HTTP/1.0 403 Forbidden');
        exit('No direct script access allowed.');
    }
    

Uso de Directivas PHP para Seguridad en Archivos de Carga

Una técnica ampliamente utilizada para mejorar la seguridad de tus scripts PHP es asegurarse de que los archivos subidos a tu aplicación sean gestionados adecuadamente. Asegurarse de que la información recibida sea del tipo esperado y tratarla adecuadamente es crucial.

Validación de Tipos de Archivos Subidos

Para restringir y validar los tipos de archivos que los usuarios pueden cargar a través de tu sitio web, puedes usar el siguiente fragmento de código:

    $fileType = pathinfo($_FILES['uploaded_file']['name'], PATHINFO_EXTENSION);
    $allowedTypes = array('jpg', 'png', 'gif');
    if(!in_array($fileType, $allowedTypes)){
        die('Tipo de archivo no permitido.');
    }
    

Seguridad en la Gestión de Archivos Subidos

Además de verificar el tipo de archivo, es importante almacenar los archivos en un lugar seguro y utilizar nombres aleatorios para evitar conflictos y posibles sobreescrituras. Asimismo, revisa siempre el tamaño de los archivos y emplea las funciones de PHP para manejar ficheros de manera segura.

Ejemplo de código para manejo seguro de archivos subidos:

    $newFileName = md5(uniqid()) . '.' . $fileType;
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], 'uploads/' . $newFileName)){
        echo 'El archivo ha sido cargado con éxito.';
    } else {
        echo 'Error al subir el archivo.';
    }
    


Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad