Maison > développement back-end > Tutoriel Python > Comment Django peut-il servir en toute sécurité des fichiers téléchargeables à l'aide de X-Sendfile (ou X-Accel-Redirect) ?

Comment Django peut-il servir en toute sécurité des fichiers téléchargeables à l'aide de X-Sendfile (ou X-Accel-Redirect) ?

Barbara Streisand
Libérer: 2024-11-20 13:52:14
original
941 Les gens l'ont consulté

How Can Django Securely Serve Downloadable Files Using X-Sendfile (or X-Accel-Redirect)?

Servir des fichiers téléchargeables avec Django

Les utilisateurs d'un site Web ont souvent besoin de pouvoir télécharger des fichiers, mais sécuriser les fichiers et empêcher les téléchargements directs est crucial. Une solution consiste à masquer les chemins d'accès aux fichiers afin que les utilisateurs ne puissent pas y accéder directement.

Pour y parvenir, créez une URL qui inclut un paramètre, tel que :

http://example.com/download/?f=somefile.txt
Copier après la connexion

Supposons que les fichiers téléchargeables résider dans le dossier /home/user/files/. Django peut être configuré pour servir les fichiers en téléchargement sans nécessiter une URL et une vue spécifiques pour afficher le fichier.

Le module X-Sendfile offre une solution optimale. Il permet à Django de localiser le fichier et de spécifier ses en-têtes, tandis que le service du fichier lui-même est géré par le serveur Web (par exemple, Apache, Lighttpd). Après avoir installé et configuré mod_xsendfile, intégrez-le à votre vue :

from django.utils.encoding import smart_str

response = HttpResponse(content_type='application/force-download') 
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
response['X-Sendfile'] = smart_str(path_to_file)
return response
Copier après la connexion

Notez que cette approche nécessite un contrôle du serveur ou une société d'hébergement prenant en charge mod_xsendfile.

Considérations supplémentaires :

  • Pour les serveurs nginx, utilisez X-Accel-Redirect au lieu de X-Sendfile.
  • Pour Django 1.7 et supérieur, utilisez content_type au lieu de mimetype.
  • La définition de l'en-tête 'Content-Length' est recommandée pour améliorer les performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal