Rendu sécurisé de HTML avec Flask

PythonBeginner
Pratiquer maintenant

Introduction

Lorsque vous renvoyez du HTML (le type de réponse par défaut dans Flask), toute valeur fournie par l'utilisateur affichée dans la sortie doit être escapée pour se prémunir contre les attaques par injection. Dans ce laboratoire, vous allez apprendre à utiliser escape pour y parvenir. De plus, les modèles HTML générés avec Jinja, présentés plus tard, le feront automatiquement. Pour l'instant, vous pouvez simplement utiliser escape pour le faire manuellement.

Échappement

Dans cette étape, vous allez apprendre à utiliser escape pour vous prémunir contre les attaques par injection.

  1. Ouvrez le fichier html_escaping.py et importez d'abord la classe Flask et escape.
from flask import Flask
from markupsafe import escape
  1. Ensuite, créez une instance de la classe Flask.
app = Flask(__name__)
  1. Ensuite, nous utilisons le décorateur route() pour créer une route / avec une fonction de vue appelée escaping. Dans la fonction, définissez un extrait de code JavaScript et utilisez escape pour l'afficher comme du texte, en escapant tous les caractères qui ont des significations spéciales en HTML.
@app.route('/')
def escaping():
    input = "<script>alert('XSS attack');</script>"
    escaped_input = escape(input)
    return f"User input: {escaped_input}"
  1. Créez un point d'entrée main du script pour démarrer l'application Flask sur le port 5000, en activant le mode debug.
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)
  1. Pour exécuter l'application, utilisez d'abord les commandes suivantes pour lancer l'application Flask dans le terminal :
python3 html_escaping.py

Ensuite, ouvrez l'onglet "Web 5000" situé en haut de l'interface, actualisez la page et vous devriez voir le message : XSS attack prevention example

  • Les balises <script> sont affichées en toute sécurité comme du texte sans être exécutées en tant que JavaScript, démontrant la prévention d'une attaque XSS.

Résumé

Dans ce laboratoire, nous avons appris à utiliser escape pour échapper manuellement l'entrée. Cela peut être très utile lorsqu'il s'agit de traiter des attaques potentiellement dangereuses. Plus tard, nous apprendrons comment générer des modèles avec Jinja, qui peut le faire automatiquement et efficacement.