Sichere Entwicklung von Flask-Webanwendungen

FlaskFlaskBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

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

Einführung

In diesem Lab werden wir wichtige Sicherheitsüberlegungen bei der Entwicklung von Webanwendungen mit Flask untersuchen. Wir werden Themen wie Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), JSON-Sicherheit, Sicherheitsheader und sichere Cookie-Optionen behandeln. Indem Sie diese Schritte befolgen, lernen Sie, wie Sie die Sicherheit Ihrer Flask-Anwendungen verbessern können.

Hinweis: Sie müssen die Code-Datei selbst erstellen und in der Umgebung ausführen. Sie können den Status des Flask-Diensts auf Web 5000 vorab anzeigen.

Cross-Site Scripting (XSS)

Cross-Site Scripting (XSS) ist eine Schwachstelle, die Angreifern ermöglicht, böswillige Skripte in von Benutzern angesehene Webanwendungen einzufügen. Um XSS-Angriffe in Flask zu verhindern, folgen Sie diesen Richtlinien:

  • Entfernen Sie immer Sonderzeichen, um die Einbindung beliebiger HTML-Tags zu vermeiden.
  • Seien Sie vorsichtig, wenn Sie HTML ohne die Hilfe von Jinja2-Vorlagen generieren.
  • Verwenden Sie die Markup-Klasse, um benutzerdefinierte Daten zu filtern.
  • Vermeiden Sie das Senden von HTML- oder Textdateien aus hochgeladenen Dateien.

Beispielcode:

## app.py

from flask import Flask, render_template_string, Markup

app = Flask(__name__)

@app.route('/')
def index():
    value = '<script>alert("XSS Attack")</script>'
    safe_value = Markup.escape(value)
    return render_template_string('<input value="{{ value }}">', value=safe_value)

Um den Code auszuführen, speichern Sie ihn in einer Datei namens app.py und führen Sie den Befehl flask run aus.

Cross-Site Request Forgery (CSRF)

Cross-Site Request Forgery (CSRF) ist ein Angriff, bei dem Benutzer dazu gebracht werden, unbeabsichtigte Aktionen auf einer Website auszuführen. Um CSRF-Angriffe in Flask zu verhindern, folgen Sie diesen Richtlinien:

  • Verwenden Sie einmalige Token, um Anforderungen zu validieren, die den Serverinhalt ändern.
  • Speichern Sie das Token im Cookie und übermitteln Sie es mit den Formulardaten.
  • Vergleichen Sie das empfangene Token auf dem Server mit dem im Cookie gespeicherten Token.

Beispielcode:

## app.py

from flask import Flask, request, session, redirect, url_for

app = Flask(__name__)
app.secret_key = 'secret_key'

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/delete', methods=['POST'])
def delete_user():
    if request.method == 'POST':
        token = request.form.get('token')
        if token and token == session.get('csrf_token'):
            ## Delete user profile
            return redirect(url_for('index'))
    return 'Invalid request'

if __name__ == '__main__':
    app.run()

Um den Code auszuführen, speichern Sie ihn in einer Datei namens app.py und führen Sie den Befehl flask run aus.

JSON-Sicherheit

In Flask ist es wichtig, die Sicherheit von JSON-Antworten sicherzustellen. In Versionen von Flask vor 0.10 wurden Top-Ebene-Arrays aufgrund einer Sicherheitslücke nicht in JSON serialisiert. Diese Verhalten hat sich jedoch geändert, und Top-Ebene-Arrays werden jetzt serialisiert. Es wird empfohlen, die neueste Version von Flask zu verwenden, um von dieser Sicherheitsverbesserung zu profitieren.

Sicherheitsheader

Browser erkennen verschiedene Antwortheader, um die Sicherheit zu steuern. Es wird empfohlen, die folgenden Sicherheitsheader in Ihrer Flask-Anwendung zu überprüfen und zu verwenden:

  • HTTP Strict Transport Security (HSTS): Fordert den Browser auf, alle HTTP-Anforderungen in HTTPS umzuwandeln.
  • Content Security Policy (CSP): Bestimmt, von welchen Quellen verschiedene Arten von Ressourcen geladen werden können.
  • X-Content-Type-Options: Erzwungen den Browser, den Antwort-Inhaltstyp zu beachten.
  • X-Frame-Options: Verhindert, dass externe Websites Ihre Website in einem iframe einbetten.

Sie können die Erweiterung Flask-Talisman verwenden, um HTTPS und Sicherheitsheader in Ihrer Flask-Anwendung zu verwalten.

Wenn Sie in Flask Cookies setzen, ist es wichtig, Sicherheitsoptionen zu berücksichtigen, um sensible Daten zu schützen. Einige empfohlene Optionen sind:

  • Secure: Beschränkt Cookies auf HTTPS-Verkehr ausschließlich.
  • HttpOnly: Schützt den Inhalt von Cookies davor, mit JavaScript gelesen zu werden.
  • SameSite: Beschränkt, wie Cookies mit Anforderungen von externen Websites gesendet werden.

Beispielcode:

## app.py

from flask import Flask, make_response

app = Flask(__name__)

@app.route('/')
def index():
    response = make_response('Hello, world!')
    response.set_cookie('username', 'flask', secure=True, httponly=True, samesite='Lax')
    return response

if __name__ == '__main__':
    app.run()

Um den Code auszuführen, speichern Sie ihn in einer Datei namens app.py und führen Sie den Befehl flask run aus.

HTTP Public Key Pinning (HPKP)

HTTP Public Key Pinning (HPKP) ist eine Sicherheitsfunktion, die dem Browser mitteilt, dass er sich nur mit einem bestimmten Zertifikatschlüssel bei dem Server authentifizieren soll. Während dies die Sicherheit erhöhen kann, ist es auch schwierig rückgängig zu machen, wenn es falsch eingerichtet oder aktualisiert wird. Verwenden Sie daher HPKP mit Vorsicht und stellen Sie sicher, dass die Konfiguration korrekt ist.

Zusammenfassung

In diesem Lab haben wir wichtige Sicherheitsüberlegungen bei der Entwicklung von Webanwendungen mit Flask untersucht. Wir haben Maßnahmen zur Verhinderung von Cross-Site Scripting (XSS)- und Cross-Site Request Forgery (CSRF)-Angriffen sowie zur Sicherung von JSON-Antworten und Einstellung von Sicherheitsheadern und Cookie-Optionen behandelt. Indem Sie diese Sicherheitsmaßnahmen befolgen, können Sie die Sicherheit Ihrer Flask-Anwendungen erhöhen und Benutzerdaten vor potenziellen Schwachstellen schützen.