Maison >développement back-end >Tutoriel Python >Comment puis-je servir en toute sécurité des fichiers statiques dans mon application Flask ?

Comment puis-je servir en toute sécurité des fichiers statiques dans mon application Flask ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 06:22:16195parcourir

How Can I Securely Serve Static Files in My Flask Application?

Servir des fichiers statiques dans Flask : un guide complet

Flask permet de servir sans effort des fichiers statiques, généralement utilisés pour les pages HTML, les feuilles de style et Fichiers JavaScript. Bien que cela puisse paraître simple, il est crucial de comprendre les approches recommandées pour éviter les failles de sécurité.

Utilisation de la configuration des dossiers

En production, déléguez la diffusion de fichiers statiques à un site Web dédié serveur, tel que Nginx ou Apache, pour gérer efficacement un trafic élevé. Configurez ces serveurs pour répondre aux requêtes vers un dossier spécifique contenant vos fichiers statiques.

Route des fichiers statiques de Flask

Flask établit automatiquement une route pour les fichiers statiques situés dans le dossier "/ static" dossier adjacent à votre application Flask. Cet itinéraire est accessible en utilisant url_for :

url_for('static', filename='js/analytics.js')

Utilisation de send_from_directory

Dans les cas où des itinéraires personnalisés ou des contrôles d'autorisation sont nécessaires, envisagez send_from_directory. Il garantit que les chemins fournis par l'utilisateur sont contenus dans un répertoire sécurisé :

@app.route('/reports/<path:path>')
def send_report(path):
    return send_from_directory('reports', path)

Considérations de sécurité

Évitez d'utiliser send_file ou send_static_file avec des chemins fournis par l'utilisateur. Ces méthodes sont vulnérables aux attaques par traversée de répertoires. Optez plutôt pour send_from_directory, qui gère de manière sécurisée les chemins fournis par l'utilisateur dans un répertoire connu.

Servir des fichiers à partir de la mémoire

Pour les fichiers générés en mémoire sans être écrits dans le système de fichiers, transmettez un objet BytesIO à send_file. Spécifiez des arguments supplémentaires pour les métadonnées de fichier qui ne peuvent pas être déduites.

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!

Déclaration:
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