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 beim Öffnen dieses Formulars geladen.

← Alle Beiträge

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 passiert
  • index.php.2026-08-19
  • index.php.kopie
  • style.css.alt
  • index.php.1
DateinameAntwortprobe.bak403index.php.vor-xyz200index.php.2026-08-19200index.php.kopie200style.css.alt200die naive Liste fängt einen von fünf

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.

Anzeige