Eine Sicherung im Web-Verzeichnis ist ein Quelltextleck
Über die Inhalte und ihre Prüfung
In diesem Artikel
Vor der Änderung einer großen Datei liegt es nahe, sie erst zu kopieren. cp index.php index.php.vor-aenderung, dann arbeiten. Liegt diese Datei in dem Verzeichnis, das der Webserver veröffentlicht, ist damit der gesamte Quelltext als reiner Text herunterladbar geworden — Datenbankzugänge, Geheimnisse, alles, was in der Datei zufällig steht.
Apache schickt index.php durch PHP, weil sie auf .php endet. index.php.vor-aenderung endet nicht auf .php. Sie endet auf .vor-aenderung, was Apache noch nie gehört hat, also tut er das Naheliegende und sendet die Bytes.
Die Regel, die die meisten schreiben, und warum sie nicht reicht
Der übliche Schutz ist eine Verbotsliste von Endungen: .bak, .orig, .save, .sql, .old. Sie fängt die naheliegende Datei. Hier ausprobiert gab diese Liste die richtige Antwort für probe.bak und die falsche für jede einzelne von diesen:
index.php.vor-xyz— so ist es tatsächlich passiertindex.php.2026-08-19index.php.kopiestyle.css.altindex.php.1
Alle mit 200 ausgeliefert. Das Namensmuster, an das niemand gedacht hat, ist genau das, das am Ende benutzt wird, denn Sicherungen werden nach dem benannt, was gerade anlag.
Den Schnitt umdrehen
Die Regel, die funktioniert, fragt nicht, welche Endungen verboten sind. Sie stellt eine Frage über den Bau: enthält dieser Dateiname eine Quellendung, die nicht am Ende steht?
Wenn ja, ist es eine Kopie von etwas, das ausgeführt werden sollte, egal was der Anhang danach sagt. index.php.irgendwas passt. style.css.irgendwas passt. Das Muster deckt die Namen ab, die noch niemand erfunden hat, und darum geht es.
Heute gegen den laufenden Server geprüft: alle fünf oben genannten Namen liefern jetzt 403, auch die, die es gar nicht gibt — die Regel verweigert die Form, nicht die Datei.
Die Ausnahme, und was sie lehrt
Ein berechtigter Dateiname hier hat genau diese Form: vorkomprimierte Dateien werden als style.css.1787777226.gz geschrieben, eine Endung in der Mitte, so gewollt. Die Regel trägt deshalb eine einzige schmale Ausnahme für einen Zahlenabschnitt gefolgt von .gz, und diese Datei liefert 200, wie sie soll.
An so einer Ausnahme gehen diese Regeln üblicherweise kaputt, also lohnt es zu sagen, was diese hier sicher macht: sie ist eng genug, dass sich kein index.php.irgendwas.gz bauen lässt, um den Quelltext zurückzubekommen, denn der mittlere Abschnitt muss aus Ziffern bestehen. Eine breitere Ausnahme — „alles, was auf .gz endet" — hätte die ganze Regel wieder hergegeben.
Und der einfachste Rat bleibt der, der all das unnötig macht: Sicherungen außerhalb des veröffentlichten Verzeichnisses ablegen. Die Regel ist ein Netz für den Tag, an dem es vergessen wird, kein Freibrief, sich nicht mehr darum zu kümmern, wo die Kopie landet.