Cyberangriffe auf Webseiten werden täglich häufiger. Mit bewährten Sicherheitsmaßnahmen können Sie sich und Ihre Nutzer vor den meisten Attacken schützen.
1. Die größten Web-Security-Risiken
- Cross-Site Scripting (XSS): Böser Code wird im Browser ausgeführt
- Cross-Site Request Forgery (CSRF): Ungewollte Aktionen im Namen des Nutzers
- SQL-Injection: Datenbankbefehle werden manipuliert
- Broken Authentication: Schwache Authentifizierung
- Sensitive Data Exposure: Vertrauliche Daten werden offengelegt
2. XSS (Cross-Site Scripting)
Was ist XSS?
Ein Angreifer injiziert bösen JavaScript-Code in Ihre Seite, der dann im Browser der Nutzer ausgeführt wird. Das kann Cookies stehlen, Formulare manipulieren oder Schadsoftware installieren.
Sichere Lösungen:
1. HTML-Escaping verwenden
Alle Benutzer-Eingaben müssen vor der Ausgabe escaped werden. Das bedeutet: < wird zu <, > wird zu >, etc.
2. textContent statt innerHTML
JavaScript: Nutze textContent statt innerHTML. textContent escaped automatisch alle HTML-Tags.
3. Content Security Policy (CSP)
CSP ist ein HTTP-Header, der dem Browser mitteilt, welche Ressourcen geladen werden dürfen. So werden inline Scripts automatisch blockiert.
3. CSRF (Cross-Site Request Forgery)
Was ist CSRF?
Ein Angreifer verleitet Sie, ein Formular ohne Ihr Wissen abzuschicken. Zum Beispiel könnte eine Seite im Hintergrund ein Formular abschicken, das in Ihrem Namen Geld überweist.
Lösung: CSRF-Token
Der Server generiert einen einzigartigen Token für jeden Nutzer. Formulare müssen diesen Token enthalten. Der Server validiert den Token vor der Verarbeitung. Angreifer kennen den Token nicht, daher funktioniert der Angriff nicht.
Zusätzlich: SameSite Cookie-Attribut
Das SameSite-Attribut verhindert, dass Cookies an Cross-Site-Requests gesendet werden. Das macht CSRF-Attacken schwächer, aber nicht unmöglich.
4. SQL-Injection
Was ist SQL-Injection?
Angreifer fügen SQL-Befehle in Formulareingaben ein, um Datenbank-Operationen zu manipulieren. Zum Beispiel: Ein Angreifer gibt admin' -- als Benutzernamen ein und wird ohne Passwort angemeldet.
Lösung: Prepared Statements
Benutzer-Eingaben und SQL-Code müssen getrennt behandelt werden. Dies wird durch Prepared Statements (parameterisierte Queries) erreicht. Die Datenbank weiß dann, dass die Eingabe Daten ist, nicht SQL-Code.
5. Input-Validierung
Client-Side Validierung (HTML5)
HTML5 bietet eingebaute Validierung:
type="email"– Validiert E-Mail-Formattype="number"– Nur Zahlen erlaubtrequired– Feld muss gefüllt seinpattern="[A-Za-z0-9]{3,}"– Regex-Muster
Server-Side Validierung (MUSS sein!)
Client-Side Validierung ist nur für Benutzerkomfort. Ein Angreifer kann diese umgehen. Der Server muss ALLE Eingaben validieren!
6. Sichere HTTP-Header
Content Security Policy (CSP)
Teilt dem Browser mit, welche Ressourcen geladen dürfen: Inline Scripts werden blockiert, externe Scripts nur von trusted.com, etc.
Strict-Transport-Security (HSTS)
Erzwingt HTTPS für alle zukünftigen Anfragen. Verhindert Man-in-the-Middle-Attacken.
X-Frame-Options
Schützt vor Clickjacking (unsichtbare Frames mit Schad-Inhalten). Wert: DENY oder SAMEORIGIN
X-Content-Type-Options: nosniff
Verhindert MIME-Type Sniffing. Der Browser nutzt den Content-Type Header, nicht Datei-Erkennung.
7. Beste Praktiken – DO's und DON'Ts
DO – Sicherheits-Maßnahmen:
- HTTPS immer verwenden (SSL/TLS-Zertifikat)
- Alle Benutzer-Eingaben validieren (Client + Server)
- Sensible Daten verschlüsseln (Passwörter mit bcrypt/Argon2)
- Regelmäßige Sicherheits-Updates durchführen
- Logging und Monitoring einrichten
- Fehlerbehandlung (keine Debug-Infos in Produktion)
- Rate-Limiting gegen Brute-Force
- Dependencies regelmäßig aktualisieren
DON'T – Häufige Fehler:
- Passwörter im Code oder Logfiles speichern
- Sensible Daten im URL-Parameter
- Admin-Bereiche ohne 2FA freigeben
- Default-Passwörter verwenden
- Sicherheits-Warnings ignorieren
- Alte/veraltete Frameworks nutzen
- Unverschlüsselte Daten-Übertragung erlauben
- Error-Messages zu detailliert
8. Sicherheits-Checkliste
- HTTPS aktiviert und konfiguriert
- HSTS Header gesetzt
- Content-Security-Policy aktiv
- Alle User-Inputs validiert (Server-Side!)
- HTML-Output wird escaped
- SQL mit Prepared Statements
- CSRF-Token in Formularen
- Passwörter gehashed (bcrypt/Argon2)
- Dependencies aktuell
- Error-Handling ohne Debug-Infos
- Logging und Monitoring aktiv
- 2FA für Admin-Zugang
- Regelmäßige Sicherheits-Audits
9. Tools & Ressourcen
Sicherheits-Scanner:
- npm audit: Findet Vulnerabilities in Dependencies
- OWASP ZAP: Kostenlos Web App Security Scanner
- Mozilla Observatory: HTTP-Header Audit
Informationen:
- OWASP Top 10: Die 10 häufigsten Web-Sicherheitsrisiken
- CWE Top 25: Most Dangerous Software Weaknesses
- MDN Security: Mozilla Developer Network Security Guides
10. Fazit
Web-Sicherheit ist ein fortlaufender Prozess. Es gibt kein 100% Schutz, aber mit bewährten Maßnahmen können Sie die meisten Risiken minimieren. Bleiben Sie informiert, halten Sie Ihre Software aktuell und validieren Sie IMMER Benutzer-Eingaben.
Zurück zu Erkenntnisse