Kurz erklärt (TL;DR)
Die HTML Bombe ist eine winzige, vor komprimierte HTML Datei (gzip/brotli), die der Browser beim Laden automatisch entpackt. Darin steckt ein riesiger Kommentarblock (z.B. Millionen „H“), der im Speicher auf mehrere Gigabyte anwächst und Browser/Parser abstürzen lassen kann. Der Entwickler ache zeigt, wie sich das als gültige HTML Seite samt Nginx Auslieferung umsetzen lässt – mit extremem Kompressionsverhältnis (~1:1030).
Hinweis: Oft wird umgangssprachlich von „verschlüsselt“ gesprochen. Technisch ist es Kompression (gzip/brotli), die über Content-Encoding automatisch entpackt wird.
Was passiert technisch?
Gültiges HTML + riesiger Kommentar: Die Seite enthält einen sehr großen HTML Kommentar aus identischen Zeichen („H“). Dadurch bleibt das Markup formal korrekt.
Vor Kompression & Auslieferung: Die „schwere“ Seite wird vorab komprimiert (gzip/brotli) und z.B. per Nginx samt gzip_static/brotli_static
ausgeliefert. Der Client entpackt automatisch – und plötzlich liegt ein gigantischer String im Speicher.
Asymmetrie: Serverseitig kostet das fast nichts, während Client/Parser massiv RAM/CPU opfern müssen – bis zum Crash.
Sicherheits & EthikHinweise
Risiko für echte Nutzer: Wer die Seite versehentlich öffnet, riskiert einen Browser Absturz.
robots.txt & Klarheit: Ache empfiehlt, die Datei explizit zu disallowen, um legitime Crawler nicht auszubremsen.
Recht & Fairness: Der Ansatz ist eine Falle gegen aggressives Crawling. Prüfe rechtliche Rahmenbedingungen und setze lieber auf defensive Maßnahmen (Rate Limiting, Bot Management), bevor du zu drastischen Mitteln greifst
Ungefährliche Demo (Mini Bomb)
Die folgende Demo zeigt nur das Prinzip der Expansion, ohne nennenswerte Last zu erzeugen. Sie nutzt keine Kompression/Servertricks, sondern baut lokal einen überschaubaren Text (50 KB). Bitte keine Werte erhöhen – die Demo ist absichtlich klein gehalten.
<!doctype html>
<meta charset="utf-8" />
<title>HTML?Bombe – sichere Demo</title>
<style>
body { font: 14px/1.4 system-ui, sans-serif; max-width: 60ch; margin: 2rem auto; padding: 0 1rem; }
button { padding: .6rem 1rem; border: 1px solid #888; border-radius: 6px; background: #f5f5f5; cursor: pointer; }
.muted { color: #666; }
#out { white-space: pre-wrap; word-break: break-word; border: 1px dashed #ccc; padding: 1rem; margin-top: 1rem; max-height: 240px; overflow: auto; }
</style>
<h1>HTML „Bomben“ Prinzip – sichere Mini Demo</h1>
<p class="muted">
Diese Demo erzeugt lokal ca. 50 KB Text (viele „H“). Das veranschaulicht das
<em>Expansion-Prinzip</em> ohne Gefahr für Browser/Server.
</p>
<button id="go">Demo starten</button>
<p id="info" class="muted"></p>
<pre id="out" aria-live="polite"></pre>
<script>
// Bitte NICHT erhöhen – bewusst klein.
const TOTAL_CHARS = 50_000; // ~50 KB
const CHUNK_SIZE = 1_000; // in Schritten arbeiten, um UI responsiv zu halten
const out = document.getElementById('out');
const info = document.getElementById('info');
document.getElementById('go').addEventListener('click', async () => {
out.textContent = '';
info.textContent = 'Erzeuge Text …';
const chunk = 'H'.repeat(CHUNK_SIZE);
let produced = 0;
// Schrittweise "aufblasen"
while (produced < TOTAL_CHARS) {
out.textContent += chunk;
produced += CHUNK_SIZE;
await new Promise(r => setTimeout(r)); // UI atmen lassen
}
const kb = Math.round(out.textContent.length / 1024);
info.textContent = `Fertig: ~${kb} KB Text im Speicher & UI.`;
});
</script>
Warum das lehrreich ist:
In echt würde eine winzige, stark komprimierte Antwort (z.B. 10 KB gzip) beim Entpacken plötzlich gigantisch. Unsere Demo imitiert das vergrößern – aber stoppt bei ~50 KB, sodass alles stabil bleibt.
Technische Einordnung zur Original Idee von ache
Kommentar Trick: Der Bombeninhalt liegt in einem HTML Kommentar, damit der Parser die Seite als gültig akzeptiert.
Kompressionsraten: Ache berichtet von einem Verhältnis um 1:1030 (z.B. ~10 MiB komprimiert vs. ~10 GiB entpackt).
Auslieferung mit Nginx: Mit gzip_static/brotli_static
wird die vor komprimierte Datei direkt bedient; der Browser entpackt anhand von Content-Encoding
.
Beobachtetes Verhalten: Firefox führt zu NS_ERROR_OUT_OF_MEMORY
, Chrome zeigt früh einen SIGKILL Fehlerbildschirm – also genau der gewünschte Out of Memory Effekt.
Fazit
Die HTML Bombe ist ein cleveres, aber zweischneidiges Proof of Concept: minimaler Serveraufwand, maximale Clientlast. Als Lehrbeispiel macht sie das Problem deutlich – produktiv ist sie heikel. Wer Inhalte schützen will, sollte vorrangig auf saubere Bot Erkennung, Quoten & Rate Limits setzen; die Bomben Idee bleibt ein Warnsignal dafür, wie weit das Wettrüsten bereits ist.
Quellen & weiterführend:
Ache: A valid HTML zip bomb (Details zu HTML Kommentar, gzip/brotli, Nginx Setup, Beobachtungen).