Hallo!
Mit: <?php include("/ordner/textdatei.txt"); ?> lade ich den Content (Text) an die entsprechende Stelle in dem HTML-Dokument. Die Textdateien befinden sich in einem Unterordner. Soweit funktioniert auch alles wunderbar.
Nur wie sieht es mit der Sicherheit aus?
Ich habe des öfteren von 'Risiken' in Verbindung mit der include-Anweisung gelesen. Leider kenne ich mich mit PHP zu wenig aus um beurteilen zu können, ob diese Vorgehensweise 'sicher' ist?!
Ja und nein. Der Standardfehler bei include, dass fremde Inhalte über sogenantes URI injection geladen werden können, tritt nicht auf (siehe Franks Posting). Denn Du schreibst ja einen festen Wert dahin, also include 'WERT' und nicht include $VARIABLE.
Allerdings: Ganz so einfach ist das ganze nicht. Denn die Frage ist: Wie kommt "/ordner/textdatei.txt" zustande? Wenn Du die immer komplett selbst schreibst und der Besucher von außen KEINERLEI Einfluss darauf hat, dann bist Du aus dem Schneider.
Wenn allerdings die Datei dynamisch erzeugt wird von einem Script und der Besucher Einfluss auf diesen Erzeugungsprozess hat, dann führt das dazu, das jemand - wenn Du beim Erzeugungsprozess nicht aufpasst - unter Umständen doch PHP-Code bei Dir ausführen kann. Stell Dir vor, jemand schafft es, in die 'textdatei.txt' einfach ein <?php boese_funktion (); ?> einzufügen - dann wird das durch das Einbinden per include ausgeführt und Du hast ein Problem.
Das korrekte Verhalten in dem Fall wäre, wenn Du natürlich dafür sorgst, dass das Script, das Benutzerdaten entgegen nimmt und die Datei erzeugt, dafür sorgt, dass so ein Inhalt nicht in die Datei kommen kann.
Da man teilweise (v.a. als Anfänger) sowas schwer sehen kann, kann man aber das Risiko eines derartigen Angriffs minimieren, indem man readfile() statt include verwendet. include benötigt man nur, wenn in der Datei auch PHP-Code stehen soll - wenn dies NICHT der Fall ist, reicht ein einfaches
readfile ("/pfad/dateiname.txt");
Dann kann zumindest kein PHP-Code ausgeführt werden, wenn jemand es schafft, die Datei irgendwie zu manipulieren. Allerdings: Das ist dann nur die halbe Miete, weil dann natürlich jemand trotzdem noch beliebigen HTML- und JavaScript-Code einschleusen könnte. Insbesondere JavaScript könnte dann dazu genutzt werden, Daten anderer Kunden auszuspionieren oder zu manipulieren - das ganze nennt sich dann Cross Site Scripting. Daher ist readfile nur eine ZUSÄTZLICHE Sicherheitsmassnahme, um im Extremfall das Allerschlimmste zu vermeiden, allerdings beseitigt es das eigentliche Problem nicht.
Daher gilt auch bei readfile weiterhin: Sorge dafür, dass die Datei, die erzeugt wird, nur den Inhalt enthält, den sie enthalten soll und nichts anderes.
Wenn natürlich der Inhalt der Datei komplett von Dir erzeugt wird und von keinem Script bearbeitet wird, dann brauchst Du Dir keine Sorgen zu machen, dass dabei etwas passiert. Ich wollte hier an der Stelle jedoch generell mal etwas zum Thema schreiben, denn oft wird nicht bedacht, dass selbst ein vermeintlich "sicheres" include unter Umständen gar nicht sicher ist.
Viele Grüße,
Christian