Sicherheit von C#-Anwendungen: Die Top-10-Schwachstellen in der Praxis

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: Die Top-10-Schwachstellen in der Praxis



Sicherheit ist eine der wichtigsten Komponenten bei der Entwicklung moderner Anwendungen mit C# und .NET. Selbst ein kleiner übersehener Fehler kann zu Datenlecks oder einer vollständigen Kompromittierung des Systems führen. In diesem Artikel analysieren wir die 10 häufigsten Schwachstellen, auf die C#-Entwickler stoßen, und zeigen, wie Sie diese in der Praxis vermeiden können.



1. SQL-Injection

Die älteste und gefährlichste Schwachstelle. Sie tritt auf, wenn Benutzereingaben direkt in eine SQL-Abfrage eingefügt werden.



Anfälliger Code:

string login = txtLogin.Text;string query = "SELECT * FROM Users WHERE Login = '" + login + "'";SqlCommand cmd = new SqlCommand(query, connection);


Sicherer Code (parametrisierte Abfragen):

string login = txtLogin.Text;string query = "SELECT * FROM Users WHERE Login = @login";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@login", login);


Zusätzlicher Schutz: Verwenden Sie ein ORM (Entity Framework) – es parametrisiert Abfragen automatisch.



2. Cross-Site-Scripting (XSS)

Ein Angreifer schleust schädlichen JavaScript-Code über Benutzereingaben in eine Seite ein.



Anfälliger Code:

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


Sicherer Code (Ausgabekodierung):

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


Verwenden Sie in ASP.NET Core @Html.Encode() oder die Razor-Syntax mit automatischer Kodierung.



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

Ein Angriff, bei dem ein Angreifer einen Benutzer dazu zwingt, eine unerwünschte Aktion auf einer Website auszuführen, bei der er angemeldet ist.



Anfälliger Code (fehlender Schutz):

[HttpPost]public IActionResult DeleteAccount(int userId){    // Konto löschen ohne Token-Überprüfung    return Ok();}


Schutz mit Anti-Forgery-Tokens in ASP.NET Core:

[HttpPost][ValidateAntiForgeryToken]public IActionResult DeleteAccount(int userId){    // Sicheres Löschen    return Ok();}


Auf der Clientseite wird das Token über ein verstecktes Formularfeld oder einen Header übertragen.



4. Unsichere Deserialisierung

Bei der Deserialisierung von Daten aus einer nicht vertrauenswürdigen Quelle kann ein Angreifer beliebigen Code ausführen.



Anfälliger Code (BinaryFormatter):

BinaryFormatter formatter = new BinaryFormatter();using (FileStream fs = new FileStream("data.bin", FileMode.Open)){    var obj = formatter.Deserialize(fs); // Gefährlich!}


Sichere Alternativen:

  • Verwenden Sie System.Text.Json oder Newtonsoft.Json mit Typeneinschränkung.
  • Aktivieren Sie TypeNameHandling.None.
  • Vermeiden Sie BinaryFormatter, SoapFormatter und LosFormatter.


5. Mängel bei Authentifizierung und Sitzungsverwaltung

Schwache Authentifizierung, Speicherung von Passwörtern im Klartext, vorhersagbare Sitzungstoken.



Fehler:

  • Speicherung des Passworts im Klartext: User.Password = txtPassword.Text;
  • Eigene Implementierung von Hashing ohne Salt.
  • Verwendung von Guid.NewGuid() zur Generierung von Token – zu vorhersagbar.


Richtiger Ansatz:

  • Verwenden Sie ASP.NET Core Identity – eine integrierte Lösung.
  • Hashen Sie Passwörter mit BCrypt.Net oder

Blogs

Buchempfehlungen