Debe usar las apis sendfile proporcionadas por servidores populares como apache
o nginx
en producción. Muchos años estuve usando sendfile api de estos servidores para proteger archivos. Luego creó una aplicación django basada en middleware simple para este propósito, adecuada tanto para el desarrollo como para la producción. Puede acceder al código fuente aquí .
ACTUALIZACIÓN: en la nueva versión, el python
proveedor usa django FileResponse
si está disponible y también agrega soporte para muchas implementaciones de servidor desde lighthttp, caddy hasta hiawatha
Uso
pip install django-fileprovider
- agregar
fileprovider
aplicación a la INSTALLED_APPS
configuración,
- agregar
fileprovider.middleware.FileProviderMiddleware
a la MIDDLEWARE_CLASSES
configuración
- establecer
FILEPROVIDER_NAME
configuraciones en nginx
o apache
en producción, por defecto es python
para fines de desarrollo.
en sus vistas de clase o función establezca el X-File
valor del encabezado de respuesta en la ruta absoluta al archivo. Por ejemplo,
def hello(request):
// code to check or protect the file from unauthorized access
response = HttpResponse()
response['X-File'] = '/absolute/path/to/file'
return response
django-fileprovider
Se ha implementado de manera tal que su código solo necesitará una modificación mínima.
Configuración de Nginx
Para proteger el archivo del acceso directo, puede establecer la configuración como
location /files/ {
internal;
root /home/sideffect0/secret_files/;
}
Aquí nginx
establece una dirección URL de /files/
acceso solo internamente, si está utilizando la configuración anterior, puede configurar X-File como,
response['X-File'] = '/files/filename.extension'
Al hacer esto con la configuración nginx, el archivo estará protegido y también puede controlar el archivo desde django views