Support kontaktieren

Wir melden uns per E-Mail. Meist innerhalb von zwei Tagen.

Zum Schutz vor Missbrauch prüft Google reCAPTCHA diese Einsendung. Dabei werden Daten an Google übertragen. Das Skript wird erst geladen, wenn Sie dieses Formular öffnen.

← Alle Beiträge

Eine Sicherung im Web-Verzeichnis ist ein Quelltextleck

Bevor man eine große Datei ändert, kopiert man sie natürlicherweise erst. cp index.php index.php.vor-aenderung, dann arbeiten. Liegt diese Datei in dem Verzeichnis, das der Webserver veröffentlicht, hast du gerade deinen gesamten Quelltext als reinen Text herunterladbar gemacht — 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 Datei, an die du gedacht hast. 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 passiert
  • index.php.2026-08-19
  • index.php.kopie
  • style.css.alt
  • index.php.1

Alle mit 200 ausgeliefert. Das Namensmuster, an das du nicht gedacht hast, ist genau das, das du benutzen wirst, denn Sicherungen benennt man nach dem, was man gerade tat.

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 man kein index.php.irgendwas.gz bauen und seinen Quelltext zurückbekommen kann, 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 du es vergisst, kein Freibrief, sich nicht mehr darum zu kümmern, wo die Kopie landet.

Anzeige