Sé que hay muchas preguntas similares por ahí, y las he rastreado todas, pero parece que no puedo encontrar ninguna solución que funcione.
Tengo una carpeta en la raíz de mi sitio web que contiene archivos cargados que se pueden ver y descargar desde el sitio cuando un usuario inicia sesión. Están aquí: https://example.com/uploads (por ejemplo). Necesito que el sitio pueda continuar accediendo a ellos para mostrarlos (algunos son imágenes) y proporcionar enlaces para descargar (pdf, etc.) para que el usuario pueda descargarlos, pero quiero evitar que alguien se apodere de la url de un archivo en particular pudiendo descargarlos directamente, así: https://example.com/uploads/2020/02/myfile.pdf . O estas URL ingresan a los motores de búsqueda (o si lo hacen, el servidor evita que se acceda directamente a ellas).
Intenté agregar un archivo .htaccess en el directorio de cargas con el siguiente contenido:
Order Deny,Allow Deny from all Allow from 127.0.0.1y lo he intentado
Order Allow,Deny Deny from all Allow from 127.0.0.1...como leí, eso podría permitir llamadas HTTPS desde el sitio mismo, así como direcciones URL locales.
Pero prohíbe el sitio y una solicitud de URL directa, lo cual no es bueno.
¿Hay alguna forma de hacer esto?
La interfaz de usuario que proporciona el acceso 'oficial' a los archivos tiene autenticación de usuario, sí, pero los archivos aún existen en un directorio que no impedirá que nadie acceda a ellos si conocen la URL.
Debe proteger los archivos con el mismo sistema de autenticación que está utilizando para proteger el acceso a la interfaz de usuario. La única forma en que podría proteger estos recursos por dirección IP (la dirección IP del cliente ), como está intentando actualmente en .htaccess , es si la IP del cliente es fija y conocida de antemano (pero si este fuera el caso, entonces no lo haría). necesita otra forma de autenticación para empezar).
Por lo tanto, esto será principalmente un ejercicio en cualquier lenguaje de secuencias de comandos/CMS que se esté utilizando para autenticar la "interfaz de usuario".
Para lo que puede usar .htaccess es para reescribir las solicitudes de estos archivos en su secuencia de comandos del lado del servidor que maneja la autenticación y luego entrega el archivo al cliente una vez autenticado.
Por ejemplo:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^uploads/. /serve-protected-file.php [L] Cualquier solicitud de /uploads/<something> (por ejemplo, /uploads/2020/02/myfile.pdf ), que se asigna a un archivo válido, se enruta a su secuencia de comandos: /serve-protected-file.php .
/serve-protected-file.php necesitaría hacer algo como lo siguiente:
// 1. Parse the file being requested from REQUEST_URI // 2. Is the requested file "protected"? // (Serving both protected and public files from the same directory?) // 3. If not protected then serve/stream the resource to the client. END // 4. If protected then authenticate the user... // 5. If user authenticated then serve/stream the resource to the client. END // 6. Resource is protected and user not authenticated... // Serve a 403 Forbidden. END (Idealmente, la ubicación de estos recursos "protegidos" estaría completamente fuera de la raíz del documento, por lo que son "privados" de manera predeterminada, y la URL que el usuario usa para acceder a estos recursos es completamente virtual; entonces probablemente no necesite cualquier codificación adicional en .htaccess y todo sería implementado por su controlador frontal, pero todo depende de cómo se implemente su sitio y la forma en que se enrutan las URL).