IT-Sicherheit
XSS (Cross-Site Scripting) – Wie HTML-Injection funktioniert
Kevin KrögerIT-Sicherheit
XSS ist wenn ein Attacker JavaScript-Code in eine Website injiziert. Dieser Code wird dann im Browser von echten Benutzern ausgeführt. Das ist super gefährlich – die KI kann Cookies stehlen, den User impersonieren, oder Malware verbreiten.
Typen von XSS
Reflected XSS:
Der Attacker sendet einen Link mit malicious Code in der URL:
```
https://example.com/search?q=<script>alert('hacked')</script>
```
Die Website nimmt den `q` Parameter und gibt ihn in der Response zurück:
```html
<h1>Suchergebnisse für: <script>alert('hacked')</script></h1>
```
Der Browser interpretiert das `<script>` Tag und führt den Code aus.
Stored XSS:
Der Attacker speichert bösen Code in der Datenbank (z.B. in einem Comment). Jedes Mal wenn jemand die Page mit dem Comment besucht, wird der Code ausgeführt.
Das ist schlimmer als Reflected XSS, weil es persistent ist.
DOM-based XSS:
Der Code wird im JavaScript ausgeführt (nicht auf dem Server). Beispiel:
```javascript
document.getElementById("output").innerHTML = location.hash.substring(1);
```
Wenn die URL `#<img src=x onerror="alert('xss')">` ist, wird der Code ausgeführt.
Auswirkungen
Was kann ein Attacker mit XSS tun?
1. Cookies stehlen: Bekomme das Session Cookie und impersoniere den User
2. User umleiten: Redirect den User zu einer Phishing-Seite
3. Formular-Data stehlen: Stehle was der User in ein Formular eingibt
4. Malware verbreiten: Lade Malware oder sketchige Scripts
5. Fake Content anzeigen: Zeige fake "Du musst zahlen" Messages
Das ist ernst.
Wie man sich schützt
1. Output Escaping:
Wenn du Benutzer-Input anzeigst, escape ihn:
```python
# FALSCH – XSS:
html = f"<h1>{user_input}</h1>"
# RICHTIG:
from html import escape
html = f"<h1>{escape(user_input)}</h1>"
```
Das wird `<script>alert('xss')</script>` zu `<script>alert('xss')</script>`, was es als Text anzeigt, nicht als Code.
2. Content Security Policy (CSP):
Ein HTTP Header der sagt, welche Scripts erlaubt sind:
```
Content-Security-Policy: script-src 'self'
```
Das sagt: Nur Scripts von meiner eigenen Domain sind erlaubt. Externe Scripts sind blockiert.
3. Nutze moderne Frameworks:
React, Vue, Angular – diese escapen User-Input by default. Das schützt dich vor vielen XSS-Attacken.
```javascript
// React – Safe by default:
const App = () => {
const userInput = "<script>alert('xss')</script>";
return <h1>{userInput}</h1>; // Wird als Text angezeigt, nicht ausgeführt
};
```
4. Input Validation (nicht ausreichend, aber hilft):
Validiere Input auf dem Server. Aber das ist nicht die Hauptverteidigung – Output Escaping ist.
Häufiger Fehler: innerHTML statt textContent
```javascript
// FALSCH – XSS:
document.getElementById("output").innerHTML = user_input;
// RICHTIG:
document.getElementById("output").textContent = user_input;
```
`innerHTML` interpretiert HTML. `textContent` gibt es als reine Text.
Fazit
XSS ist zu 80% preventable durch simple Output Escaping. Die Regel: Benutzer-Input, der angezeigt wird, muss escaped sein. Punkt.
FAQ
Related Articles
IT-Sicherheit
OWASP Top 10 – Die häufigsten Web-Sicherheitslücken erklärt
Die OWASP Top 10 ist eine Liste der zehn häufigsten und gefährlichsten Sicherheitslücken in Web-Anwendungen. Die Liste w...
IT-SicherheitSQL Injection – Die häufigste Web-Schwachstelle erklärt
SQL Injection ist die wahrscheinlich häufigste und gefährlichste Web-Schwachstelle. Auf fast jeder Liste von Top Hacking...
IT-SicherheitSecure Coding – 10 Regeln um sichere Software zu bauen
Du brauchst nicht ein Security-Experte zu sein um sichere Code zu schreiben. Du brauchst nur 10 einfache Regeln zu follo...