Hauptseite: Unterschied zwischen den Versionen
imported>Import Version 33 |
imported>Import Version 34 |
(kein Unterschied)
| |
Version vom 24. März 2026, 14:19 Uhr
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
Sicherheitsanalyse-Bericht (MeinCMS) - 21.03.2026
Dieser Bericht dokumentiert die aktuelle Sicherheitslage von MeinCMS nach der ersten Entwicklungsphase. Er identifiziert bestehende Schutzmechanismen und potenzielle Schwachstellen, die noch nicht behoben wurden.
1. Übersicht der Schutzmechanismen (Ist-Zustand)
- XSS-Schutz: Verwendung von
Ganss.Xss.HtmlSanitizerimPageControllervor dem Speichern von Wiki-Inhalten. - CSRF-Schutz:
[ValidateAntiForgeryToken]ist auf denHttpPost-Methoden (Create,Edit) imPageControllervorhanden. - Authentifizierung: ASP.NET Core Identity wird verwendet.
- Autorisierung: Rollenbasierte Zugriffskontrolle (
[Authorize(Roles = "Admin")]) für administrative Aufgaben (Erstellen, Bearbeiten, Historie). - SQL-Injection: Verwendung von Entity Framework Core (LINQ), was standardmäßig gegen SQL-Injection schützt (keine Verwendung von
FromSqlRawmit unsicheren Parametern gefunden). - Eingabevalidierung: Slugs werden mittels Regex im
PageControllervalidiert (IstSlugGueltig).
2. Identifizierte Schwachstellen & Risiken (Offen)
2.1 Password Policy & Account Lockout
- Schwachstelle: In
Program.csist die Passwort-Mindestlänge auf nur 6 Zeichen eingestellt (options.Password.RequiredLength = 6). - Risiko: Erhöhte Anfälligkeit für Brute-Force-Angriffe auf Admin-Accounts.
- Status: Lockout-Mechanismen (
LockoutOnFailure) sind imLogin.cshtml.csstandardmäßig auffalsegesetzt. - Empfehlung: Passwortkomplexität erhöhen (mind. 10-12 Zeichen) und Account Lockout nach X Fehlversuchen aktivieren.
2.2 Fehlender CSRF-Schutz in Razor-Formularen
- Schwachstelle: In
Neuformular.cshtmlwird das Tag-Helper<form asp-action="Create" ...>verwendet, welches automatisch ein Anti-Forgery-Token einfügt. InEdit.cshtmlwird jedoch ein direktes HTML-Tag<form action="~/Edit/@Model.Slug" ...>verwendet. - Risiko: Wenn der
@Html.AntiForgeryToken()-Aufruf im manuellen Formular fehlen würde, wäre die Aktion angreifbar. InEdit.cshtmlist er vorhanden, aber die Inkonsistenz ist eine potenzielle Fehlerquelle für zukünftige Formulare. - Empfehlung: Konsistente Verwendung von ASP.NET Core Tag-Helpern.
2.3 Sensitive Daten in Konfigurationsdateien
- Schwachstelle: Der Connection String wird direkt aus der
appsettings.jsongelesen. - Risiko: Wenn diese Dateien versehentlich ins Repository eingecheckt werden (was oft passiert, trotz
.gitignore), sind die Datenbank-Zugangsdaten exponiert. - Empfehlung: Nutzung von Environment Variables oder User Secrets für die lokale Entwicklung und Azure Key Vault / HashiCorp Vault für Produktion.
2.4 Mass Assignment (Overposting)
- Schwachstelle: Im
PageController.CreateundEditwerden Parameter wiestring slugundstring markdownInhalteinzeln entgegengenommen. Das ist sicher, solange keine komplexen Objekte direkt an Models gebunden werden. - Risiko: Zukünftige Erweiterungen, die direkt
WikiArtikeloderWikiArtikelVersionals Parameter binden, könnten dazu führen, dass Angreifer Felder wieIdoderZeitpunktmanipulieren. - Empfehlung: Einsatz von spezifischen ViewModels (DTOs) anstelle von direkter Bindung an Datenbank-Models.
2.5 Clickjacking
- Schwachstelle: Es fehlen explizite Security-Header wie
X-Frame-Optionsoder eineContent-Security-Policy(CSP). - Risiko: Die Anwendung könnte in einem Iframe auf einer bösartigen Seite eingebettet werden, um Benutzer zu Aktionen zu verleiten.
- Empfehlung: Middleware hinzufügen, die
X-Frame-Options: DENYoderSAMEORIGINsetzt.
2.6 Informations-Leakage durch Fehlerseiten
- Schwachstelle: Die
Error.cshtmlzeigt im Development-Modus detaillierte Fehler an. - Risiko: Wenn die Umgebung fälschlicherweise auf “Development” in Produktion steht, werden Stack-Traces und interne Pfade preisgegeben.
- Status: Die Standard-Abfrage
if (app.Environment.IsDevelopment())inProgram.csist vorhanden, was das Risiko mindert, aber die Fehlermeldung inError.cshtmlselbst ist sehr generisch.
3. Administrative Tools (UserAdmin)
- Sicherheit: Das Tool
UserAdminliest Passwörter perConsole.ReadLine()im Klartext ein. - Risiko: Passwörter sind während der Eingabe auf dem Bildschirm sichtbar (Schulterblick-Gefahr).
- Empfehlung: Verwendung einer Methode zur maskierten Eingabe (Sterne statt Klartext).
4. Fazit
MeinCMS verfügt bereits über eine solide Basis an Sicherheitsmechanismen (Sanitization, CSRF-Tokens, Identity). Die kritischsten Punkte für die nächste Iteration sind die Verschärfung der Password Policy, die Absicherung der Konfigurationsdaten und die Einführung von Security-Headern (CSP, HSTS-Tuning).
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).