Sicherheit von C#-Anwendungen: Top-10-Schwachstellen und Schutz in .NET

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 und Schutzmethoden in .NET



Die Entwicklung sicherer Anwendungen mit C# und der .NET-Plattform ist eine kritische Aufgabe für jeden Entwickler. Selbst mit integrierten Schutzmechanismen kann das Framework nicht alle Angriffe verhindern. In diesem Artikel analysieren wir die 10 häufigsten Schwachstellen in C#-Anwendungen basierend auf dem aktuellen OWASP Top 10-Ranking und zeigen anhand von Codebeispielen, wie man sie vermeidet.



1. SQL-Injection

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

Verwundbarer Code:

string query = "SELECT * FROM Users WHERE Username = '" + username + "'";SqlCommand cmd = new SqlCommand(query, connection);

Sicherer Code (Verwendung parametrisierter Abfragen):

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


2. Cross-Site-Scripting (XSS)

Ein Angriff, bei dem ein Angreifer ein schädliches Skript in eine Webseite einschleust. In ASP.NET Core ist es wichtig, die Ausgabe zu kodieren.

Verwundbarer Code (Razor):

<div>@Model.UserInput</div>

Sicherer Code:

<div>@Html.Encode(Model.UserInput)</div>// Oder in ASP.NET Core verwenden Sie @Model.UserInput, wenn Sie kein HtmlString verwenden

In ASP.NET Core Razor wird die Ausgabe standardmäßig kodiert, aber bei Verwendung von @Html.Raw() oder Rückgabe eines ContentResult mit ungeprüften Daten kehrt das Risiko zurück.



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

Ein Angriff, bei dem ein Angreifer einen authentifizierten Benutzer zwingt, eine unerwünschte Aktion auszuführen.

Schutz in ASP.NET Core:

// In ConfigureServicesservices.AddAntiforgery(options => options.HeaderName = "X-CSRF-TOKEN");

// Im Controller[AutoValidateAntiforgeryToken]public class AccountController : Controller{ [HttpPost] [ValidateAntiForgeryToken] public IActionResult ChangePassword(ChangePasswordModel model) { // Code }}


4. Unsichere Deserialisierung

Eine gefährliche Schwachstelle, insbesondere bei Verwendung von BinaryFormatter, SoapFormatter oder Newtonsoft.Json mit TypeNameHandling.All.

Verwundbarer Code:

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };var obj = JsonConvert.DeserializeObject(json, settings);

Sicherer Code:

// Verwenden Sie System.Text.Json (standardmäßig sicher)var obj = JsonSerializer.Deserialize<MyType>(json);// Oder schränken Sie TypeNameHandling in Newtonsoft einvar settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None };


5. Mängel bei Authentifizierung und Sitzungsverwaltung

Umfasst schwache Passwörter, fehlende Kontosperrung, ungeschützte Cookies.

Empfehlungen:

  • Verwenden Sie ASP.NET Core Identity mit Passwortrichtlinien.
  • Konfigurieren Sie Cookie-Schutz: HttpOnly, Secure, SameSite.
  • Aktivieren Sie die Sperrung nach N fehlgeschlagenen Versuchen.
services.ConfigureApplicationCookie(options =>{    options.Cookie.HttpOnly = true;    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;    options.Cookie.SameSite = SameSiteMode.Strict;    options.ExpireTimeSpan = TimeSpan.FromMinutes(30);    options.SlidingExpiration = true;});


6. Offenlegung sensibler Daten

Speicherung von Passwörtern im Klartext, Datenübertragung über HTTP, Protokollierung von Geheimnissen.

Sicherer Code:

// Passwort-Hashingvar passwordHasher = new PasswordHasher<User>();string hash = passwordHa                

Blogs

Buchempfehlungen