Maison >développement back-end >Tutoriel Python >Comment puis-je servir en toute sécurité des fichiers statiques dans mon application Flask ?
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!