Ich schreibe eine Web-App mit dem Django-Framework. Ich habe eine Login-Funktion für Benutzer geschrieben. Wie kann ich die Eingabe am effizientesten vor SQL-Injections schützen?
Um deine Django-App vor SQL-Injection-Angriffen zu schützen, solltest du immer parametrisierte Abfragen verwenden, wenn du mit der Datenbank interagierst. In Django bedeutet dies, die von der Django-ORM bereitgestellten Query-APIs wie die filter()- und get()-Methoden zu verwenden, anstatt direkte SQL-Abfragen zu erstellen.

Durch die Verwendung der Django-ORM behandelt das Framework automatisch das Escapen von Daten, die an die Abfrage übergeben werden, um SQL-Injection-Angriffe zu verhindern. Das folgende Beispiel zeigt, wie die filter()-Methode verwendet wird, um einen Benutzer anhand seines Benutzernamens abzurufen:

from django.contrib.auth.models import User

def login(username, password):
    user = User.objects.filter(username=username).first()
    if user and user.check_password(password):
        # Anmeldung erfolgreich
    else:
        # Anmeldung fehlgeschlagen

Dieser Code ist vor SQL-Injection-Angriffen sicher, da der Benutzername als Parameter an die filter()-Methode übergeben wird und nicht direkt in die SQL-Abfrage einbezogen wird. Die Django-ORM behandelt automatisch das Escapen des Benutzernamens, um SQL-Injection zu verhindern.

Im Allgemeinen ist es bewährte Praxis, immer parametrisierte Abfragen zu verwenden, wenn du mit der Datenbank interagierst, unabhängig vom verwendeten Framework. Dadurch wird sichergestellt, dass deine Anwendung vor SQL-Injection-Angriffen geschützt ist und dein Code leichter lesbar und wartbar ist.