phpBuddy

Tutorials und Workshops

Wie kann man Daten in eine Datenbank schreiben und wieder auslesen? Wie schützt man sein Gästebuch vor Spam? Wie erstellt man eine Bildergalerie?
Diese und mehr Fragen werden in der Tutorial Rubrik sehr detailliert und leicht verständlich erklärt.

Sie sind hier: Startseite File Inclusion
Gefährliches include und require - Fazit und Download
Beitragsseiten
Gefährliches include und require
Angriffsarten
Gegenmaßnahmen
Fazit und Download
Alle Seiten

Zusammenfassung

File 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)
Glücklicherweise kann man sich recht einfach gegen diese Art Angriffe wehren, wie die beiden letzten Beispiele zeigen.

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:

  • allow_url_fopen
  • allow_url_include

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-Einbindungen

Folgende Werte sollten in der PHP.ini gesetzt sein, damit man sich gegen Remote File Inclusion Angriffe schützt:

  • allow_url_fopen On (falls man generell Zugriff auf entfernte Dateien benötigt)
  • allow_url_include Off

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.
Mir ist es lieber ich schicke aufgrund von zu scharfer Regeln ungerechtfertigterweise einige Sitebesucher in's Datennirvana, als das ich zu lasche Regeln anwende und damit riskiere ein Opfer eines Angriffs zu werde!

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)