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 verwendenIn 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