Sicherheit von C#-Anwendungen: Top-10-Schwachstellen für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Sicherheit von C#-Anwendungen: Top-10-Schwachstellen für Anfänger

Die Sicherheit von Software ist eine der Hauptaufgaben eines Entwicklers. Selbst eine kleine C#-Anwendung kann zum Ziel von Angreifern werden, wenn häufige Schwachstellen nicht berücksichtigt werden. In diesem Artikel behandeln wir die 10 gefährlichsten Schwachstellen von C# (.NET), mit denen Anfänger-Entwickler konfrontiert werden. Sie erfahren, wie sie entstehen, wie sie ausgenutzt werden und, vor allem, wie Sie sich dagegen schützen können.



1. SQL-Injection

Dies ist eine der ältesten und gefährlichsten Schwachstellen. Sie tritt auf, wenn Benutzereingaben direkt in eine SQL-Abfrage konkateniert werden.

Beispiel für anfälligen Code:

string userName = Request.QueryString["user"];string query = "SELECT * FROM Users WHERE Name = '" + userName + "'";SqlCommand cmd = new SqlCommand(query, connection);

Wie angegriffen wird: Ein Angreifer kann im Parameter user den Wert ' OR 1=1 -- übergeben, was alle Datensätze aus der Tabelle zurückgibt.

Schutz: Verwenden Sie parametrisierte Abfragen.

string query = "SELECT * FROM Users WHERE Name = @userName";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@userName", userName);


2. Cross-Site-Scripting (XSS)

Die XSS-Schwachstelle ermöglicht das Einschleusen von schädlichem JavaScript-Code in eine Seite, die anderen Benutzern angezeigt wird.

Beispiel für anfälligen Code (ASP.NET WebForms):

string comment = Request.Form["comment"];Response.Write("<div>" + comment + "</div>");

Schutz: Kodieren Sie die Ausgabe immer. Verwenden Sie HttpUtility.HtmlEncode() oder Razor-Syntax (@), die Daten automatisch kodiert.

Response.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");


3. Unsichere Deserialisierung

Bei der Deserialisierung von Daten aus einer nicht vertrauenswürdigen Quelle (z. B. einer Anfrage oder Datei) kann ein Angreifer beliebigen Code auf dem Server ausführen.

Beispiel für anfälligen Code (BinaryFormatter):

BinaryFormatter formatter = new BinaryFormatter();using (var stream = new MemoryStream(data)){    var obj = formatter.Deserialize(stream); // GEFÄHRLICH!}

Schutz: Verwenden Sie moderne Serialisierer (JSON, XML mit Einschränkungen), überprüfen Sie Typen und deserialisieren Sie niemals Daten von nicht vertrauenswürdigen Clients. Vermeiden Sie BinaryFormatter, SoapFormatter und LosFormatter.



4. Mängel bei Authentifizierung und Sitzungsverwaltung

Hierzu gehören schwache Passwörter, fehlende Begrenzung der Anmeldeversuche, ungeschützte Sitzungs-Cookies.

Beispiel für eine Schwachstelle: Sitzungs-Cookies ohne die Flags HttpOnly und Secure.

Schutz:

  • Verwenden Sie Identity oder ASP.NET Core Identity.
  • Konfigurieren Sie Cookies: HttpOnly, Secure, SameSite=Strict.
  • Aktivieren Sie die Begrenzung der Anmeldeversuche (Account Lockout).
  • Verwenden Sie HTTPS.
services.ConfigureApplicationCookie(options =>{    options.Cookie.HttpOnly = true;    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;    options.Cookie.SameSite = SameSiteMode.Strict;});


5. Cross-Site-Request-Forgery (CSRF)

Ein Angriff, bei dem ein Angreifer einen authentifizierten Benutzer dazu zwingt, eine unerwünschte Aktion auf der Website auszuführen (z. B. eine Überweisung).

Schutz: Verwenden Sie Anti-Forgery-Tokens. In ASP.NET Core geschieht dies automatisch bei Verwendung des Tags <form> mit asp-antiforgery

Blogs

Buchempfehlungen