|
|
| Zeile 2: |
Zeile 2: |
| ---- | | ---- |
|
| |
|
| = Sicherheitsanalyse-Bericht (MeinCMS) - 21.03.2026 =
| | xxxx |
| | |
| 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 <code>Ganss.Xss.HtmlSanitizer</code> im <code>PageController</code> vor dem Speichern von Wiki-Inhalten.
| |
| * '''CSRF-Schutz''': <code>[ValidateAntiForgeryToken]</code> ist auf den <code>HttpPost</code>-Methoden (<code>Create</code>, <code>Edit</code>) im <code>PageController</code> vorhanden.
| |
| * '''Authentifizierung''': ASP.NET Core Identity wird verwendet.
| |
| * '''Autorisierung''': Rollenbasierte Zugriffskontrolle (<code>[Authorize(Roles = "Admin")]</code>) 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 <code>FromSqlRaw</code> mit unsicheren Parametern gefunden).
| |
| * '''Eingabevalidierung''': Slugs werden mittels Regex im <code>PageController</code> validiert (<code>IstSlugGueltig</code>).
| |
| | |
| | |
| -----
| |
| | |
| == 2. Identifizierte Schwachstellen & Risiken (Offen) ==
| |
| | |
| === 2.1 Password Policy & Account Lockout ===
| |
| | |
| * '''Schwachstelle''': In <code>Program.cs</code> ist die Passwort-Mindestlänge auf nur 6 Zeichen eingestellt (<code>options.Password.RequiredLength = 6</code>).
| |
| * '''Risiko''': Erhöhte Anfälligkeit für Brute-Force-Angriffe auf Admin-Accounts.
| |
| * '''Status''': Lockout-Mechanismen (<code>LockoutOnFailure</code>) sind im <code>Login.cshtml.cs</code> standardmäßig auf <code>false</code> gesetzt.
| |
| * '''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 <code>Neuformular.cshtml</code> wird das Tag-Helper <code><form asp-action="Create" ...></code> verwendet, welches automatisch ein Anti-Forgery-Token einfügt. In <code>Edit.cshtml</code> wird jedoch ein direktes HTML-Tag <code><form action="~/Edit/@Model.Slug" ...></code> verwendet.
| |
| * '''Risiko''': Wenn der <code>@Html.AntiForgeryToken()</code>-Aufruf im manuellen Formular fehlen würde, wäre die Aktion angreifbar. In <code>Edit.cshtml</code> ist 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 <code>appsettings.json</code> gelesen.
| |
| * '''Risiko''': Wenn diese Dateien versehentlich ins Repository eingecheckt werden (was oft passiert, trotz <code>.gitignore</code>), 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 <code>PageController.Create</code> und <code>Edit</code> werden Parameter wie <code>string slug</code> und <code>string markdownInhalt</code> einzeln entgegengenommen. Das ist sicher, solange keine komplexen Objekte direkt an Models gebunden werden.
| |
| * '''Risiko''': Zukünftige Erweiterungen, die direkt <code>WikiArtikel</code> oder <code>WikiArtikelVersion</code> als Parameter binden, könnten dazu führen, dass Angreifer Felder wie <code>Id</code> oder <code>Zeitpunkt</code> manipulieren.
| |
| * '''Empfehlung''': Einsatz von spezifischen '''ViewModels''' (DTOs) anstelle von direkter Bindung an Datenbank-Models.
| |
| | |
| === 2.5 Clickjacking ===
| |
| | |
| * '''Schwachstelle''': Es fehlen explizite Security-Header wie <code>X-Frame-Options</code> oder eine <code>Content-Security-Policy</code> (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 <code>X-Frame-Options: DENY</code> oder <code>SAMEORIGIN</code> setzt.
| |
| | |
| === 2.6 Informations-Leakage durch Fehlerseiten ===
| |
| | |
| * '''Schwachstelle''': Die <code>Error.cshtml</code> zeigt 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 <code>if (app.Environment.IsDevelopment())</code> in <code>Program.cs</code> ist vorhanden, was das Risiko mindert, aber die Fehlermeldung in <code>Error.cshtml</code> selbst ist sehr generisch.
| |
| | |
| | |
| -----
| |
| | |
| == 3. Administrative Tools (UserAdmin) ==
| |
| | |
| * '''Sicherheit''': Das Tool <code>UserAdmin</code> liest Passwörter per <code>Console.ReadLine()</code> 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).'' | | ''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).'' |
|
| |
| [[Category:Technik]]
| |
| [[Category:Hilfe]]
| |
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
xxxx
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).