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

\n\n

Die Entwicklung sicherer Anwendungen in C# ist nicht nur ein Trend, sondern eine Notwendigkeit. Jeden Tag werden weltweit Tausende von Schwachstellen entdeckt, und Ihre Anwendung könnte das nächste Ziel sein. In diesem Artikel analysieren wir die 10 häufigsten Schwachstellen in C# (.NET)-Anwendungen, mit denen Anfänger konfrontiert werden. Sie erfahren, wie Sie diese erkennen und, was am wichtigsten ist, wie Sie Ihren Code schützen.

\n\n

1. SQL-Injection

\n\n

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

\n\n

Verwundbarer Code:

\n
string userName = Request["username"];\nstring query = "SELECT * FROM Users WHERE Name = '" + userName + "'";\nSqlCommand cmd = new SqlCommand(query, connection);
\n\n

Schutz: Verwenden Sie parametrisierte Abfragen oder Entity Framework.

\n
string userName = Request["username"];\nstring query = "SELECT * FROM Users WHERE Name = @name";\nSqlCommand cmd = new SqlCommand(query, connection);\ncmd.Parameters.AddWithValue("@name", userName);
\n\n

2. Cross-Site Scripting (XSS)

\n\n

XSS-Angriffe ermöglichen es einem Angreifer, ein bösartiges Skript auf einer Seite einzuschleusen, die anderen Benutzern angezeigt wird.

\n\n

Verwundbarer Code:

\n
string comment = Request["comment"];\nResponse.Write("<div>" + comment + "</div>");
\n\n

Schutz: Codieren Sie die Ausgabe immer. Verwenden Sie HttpUtility.HtmlEncode():

\n
string comment = Request["comment"];\nResponse.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");
\n\n

3. Fehlende Authentifizierung und Autorisierung

\n\n

Viele Anfänger vergessen, die Zugriffsrechte auf Ressourcen zu überprüfen. Beispielsweise kann ein Benutzer durch einfaches Ändern der ID in der URL auf das Profil eines anderen zugreifen.

\n\n

Verwundbarer Code:

\n
public IActionResult Profile(int userId)\n{\n    var user = _context.Users.Find(userId);\n    return View(user);\n}
\n\n

Schutz: Überprüfen Sie immer, ob der aktuelle Benutzer berechtigt ist, auf die angeforderte Ressource zuzugreifen:

\n
public IActionResult Profile(int userId)\n{\n    var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier).Value;\n    if (userId != currentUserId) return Forbid();\n    var user = _context.Users.Find(userId);\n    return View(user);\n}
\n\n

4. Datenleck durch Ausnahmen

\n\n

Entwickler geben oft vollständige Fehlerinformationen aus, einschließlich des Aufrufstapels und von Verbindungszeichenfolgen.

\n\n

Verwundbarer Code:

\n
try\n{\n    // Code\n}\ncatch (Exception ex)\n{\n    Response.Write(ex.ToString()); // GEFÄHRLICH!\n}
\n\n

Schutz: Verwenden Sie in der Produktion allgemeine Fehlermeldungen und protokollieren Sie Details an einem sicheren Ort:

\n
try\n{\n    // Code\n}\ncatch (Exception ex)\n{\n    _logger.LogError(ex, "Fehler bei der Verarbeitung der Anfrage");\n    return StatusCode(500, "Es ist ein interner Serverfehler aufgetreten");\n}
\n\n

5. Unsichere Speicherung von Passwörtern

\n\n

Die Speicherung von Passwörtern im Klartext oder mit schwachen Hash-Verfahren (MD5, SHA1) ist ein grober Fehler.

\n\n

Verwundbarer Code:

\n
string passwordHash = MD5.Hash(password); // NICHT ERLAUBT!
\n\n

Schutz: Verwenden Sie moderne Hash-Algorithmen mit Salt, z. B. BCrypt oder ASP.NET Core Identity:

\n
var passwordHasher = new PasswordHasher<IdentityUser>();\nstring passwordHash = passwordHasher.HashPassword(user, password);
\n\n

6. Unzureichender Schutz vor CSRF (Cross-Site Request Forgery)

\n\n

Ein Angriff, bei dem der Angreifer den Browser des Opfers dazu zwingt, eine unerwünschte Aktion auf einer anderen Website auszuführen, auf der

Blogs

Buchempfehlungen