| Gefährliches include und require - Fazit und Download |
Seite 4 von 4
ZusammenfassungFile Inclusion und Remote File Inclusion, bzw. Remote Command Execution Angriffe sind ausgesprochen gefährlich. Das Gefährliche daran ist, dass beim inkludieren von Dateien nicht nur einfach Text eingelesen und auf der Webseite ausgegeben wird, sondern das der Inhalt einer einzubindenden Datei interpretiert wird! Das bedeutet, dass man auch eine scheinbar harmlose irgendwas.txt oder bildchen.gif Datei untergeschoben bekommen kann und der darin enthaltene Code wird als PHP Code auf unserem Server ausgeführt! (daher auch die Bezeichung Remote Command Execution, was zu Deutsch in etwa "Entfernte Befehlausführung" bedeutet) Aber auch PHP hält seit Version 5.2 ein Mittel bereit, dass man effektiv nutzen kann um seine PHP Installation sicherer zu machen (siehe auch Server Sicherheit PHP.ini). Die Konfigurationsdatei PHP.ini beinhaltet 2 Direktiven, die sich wie folgt nennen:
Die Direktive allow_url_fopen legt fest, ob man Dateien von entfernten Server auf dem lokalen Server öffnen können soll. Steht dieser Wert auf On, ist es möglich entfernte Dateien zu öffnen und bildet somit die Grundvoraussetzung für alle Arten von RCE - zumindest war das in früheren Versionen so. Seit PHP 5.2 kam nun allow_url_include hinzu und diese Direktive macht das, was der Name impliziert. Steht dieser Wert auf On, kann man Dateien von entfernten Servern inkludieren. In der Praxis benötigt man ziemlich häufig die Option Dateien von fremden Servern zu öffnen. Das können Bilder, RSS Feed, usw. sein, die man öffnen und verarbeiten können muss. Würde man jetzt radikal allow_url_fopen auf Off setzen, hätte man zwar RCE verhindert, könnte aber viele wichtige und sinnvolle Dinge ebenso nicht mehr ausführen. Um dieses Dilemma zu vermeiden, stellt PHP nun auch allow_url_include zur Verfügung. Setzt man dessen Wert auf Off, und allow_url_fopen auf On, kann man nach wie vor entfernte Dateien öffnen, z.B. mit file_get_contents oder fopen, aber man kann keine entfernten Dateien mit include oder require einbinden. Deswegen machen wir das Gelernte einfach mal in einer Faustregel fest: Faustregel für den Umgang mit Datei-EinbindungenFolgende Werte sollten in der PHP.ini gesetzt sein, damit man sich gegen Remote File Inclusion Angriffe schützt:
Desweiteren ist es sinnvoll, bei sensiblen Filterungen immer der Whitelist den Vorzug zu geben, sofern dies möglich ist. Sollte es einmal nicht möglich sein und man muss sich einer Blacklist-Filterung bedienen, so sollte man besser übertrieben scharfe Regeln, als zu lasche Regeln anwenden. Fahrlässiger und schlampiger Umgang beim Einbinden von Dateien kann den Sitebetreiber sehr teuer zu stehen kommen, da im Fall eines GAU auf dem Server immer der Webseitenbetreiber die volle Verantwortung trägt! In harmlosen Fällen kann das bedeuten, dass einen der Hoster vom Netz nimmt und als Kunde kündigt. Im schlimmsten Fall warten Strafverfahren und hohe Geldstrafen auf einen! Anwendungsbeispiele (2 KB) |