Axel Richter: HTTP-Server Algorithmus Verhindern des Ausbrechens aus docroot

Beitrag lesen

Hallo,

Die übliche Vorgehensweise ist erstmal aus dem Pfad einen kanonischen zu machen indem sämtliche Spielereien entfernt werden: alle ../ auflösen und alle ./ durch nichts ersetzen, ggbf. zwischendurch noch symbolische Links auflösen.

Ja, dazu wäre es dann aber auch nötig, zunächst das File(docroot + abs_path) zu referenzieren, um dann mit File.getCanonicalPath() den Pfad zu bestimmen. Jedenfalls wäre es so mit Java am einfachsten. Dann könnte man die Wurzel mit docroot vergleichen, um bei Nichtübereinstimmung das File zu verwerfen.

Den Pfadnamen braucht man sowieso für allerlei Prüfungen (z.B. wenn für /foo besondere Rechte nötig sind und für /bar nicht, willst du nicht dass man die Rechteprüfung durch Benutzung von /bar/../foo umgehen kann) und da kann man dann auch trivial sehen in welchem Verzeichnis er liegt.

Ja, das wäre eine Begründung für das Tun oben ;-)). Ein kompletter HTTP-Server sollte es allerdings nicht werden. Die gibt es, auch open source, auch schon zur Genüge ;-); die brauchte ich nur zu verwenden. Meiner soll _sehr_ übersichtlich sein und _nur_ zum Demonstrieren von Sockets und HTTP dienen.

Wahrscheinlich werde ich das Sicherheitsloch einfach drin lassen und nur kommentieren. Es ist ja auch interessant zu wissen, was man alles falsch machen kann.

viele Grüße

Axel