Sicheres HTML-Rendering mit Flask

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Wenn HTML zurückgegeben wird (der Standard-Antworttyp in Flask), müssen alle von Benutzern bereitgestellten Werte, die im Output gerendert werden, escapet werden, um vor Injektionsangriffen geschützt zu werden. In diesem Lab werden Sie lernen, wie Sie escape verwenden, um dies zu erreichen. Auch HTML-Vorlagen, die mit Jinja gerendert werden, die später eingeführt wird, werden dies automatisch tun. Für jetzt können Sie einfach escape verwenden, um dies manuell zu tun.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/AdvancedTopicsGroup -.-> python/decorators("Decorators") subgraph Lab Skills python/strings -.-> lab-148875{{"Sicheres HTML-Rendering mit Flask"}} python/using_packages -.-> lab-148875{{"Sicheres HTML-Rendering mit Flask"}} python/decorators -.-> lab-148875{{"Sicheres HTML-Rendering mit Flask"}} end

Escape

In diesem Schritt lernen Sie, wie Sie escape verwenden, um sich gegen Injektionsangriffe zu schützen.

  1. Öffnen Sie die Datei html_escaping.py und importieren Sie zunächst die Flask-Klasse und escape.
from flask import Flask
from markupsafe import escape
  1. Erstellen Sie anschließend eine Instanz der Flask-Klasse.
app = Flask(__name__)
  1. Verwenden Sie dann den route()-Decorator, um eine Route / mit einer View-Funktion namens escaping zu erstellen. Definieren Sie in der Funktion einen JavaScript-Codeschnipsel und verwenden Sie escape, um ihn als Text zu rendern und alle Zeichen, die in HTML besondere Bedeutungen haben, zu escapen.
@app.route('/')
def escaping():
    input = "<script>alert('XSS attack');</script>"
    escaped_input = escape(input)
    return f"User input: {escaped_input}"
  1. Erstellen Sie einen main-Einstiegspunkt des Skripts, um die Flask-Anwendung auf Port 5000 zu starten und den Debug-Modus zu aktivieren.
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)
  1. Um die Anwendung auszuführen, verwenden Sie zunächst die folgenden Befehle, um die Flask-Anwendung in der Konsole zu starten:
python3 html_escaping.py

Öffnen Sie dann die Registerkarte "Web 5000" oben in der Schnittstelle, aktualisieren Sie die Seite, und Sie sollten die folgende Nachricht sehen:
XSS attack prevention example

  • Die <script>-Tags werden sicher als Text angezeigt und nicht als JavaScript ausgeführt, was die Verhinderung eines XSS-Angriffs demonstriert.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man escape verwendet, um die Eingabe manuell zu escapen. Dies kann sehr nützlich sein, wenn es um potenziell schädliche Angriffe geht. Später werden wir lernen, wie man Vorlagen mit Jinja rendert, was dies automatisch und effizient tun kann.