Ausbreitung des Coronavirus führt zu immer mehr Tafel-Schließungen

Um 1,6 Millionen bedürftige Tafel-Nutzer:innen jetzt nicht allein zu lassen, ruft Tafel Deutschland e.V. zu Solidarität und Unterstützung auf. Sie wollen helfen? Informationen finden Sie unter tafel.de.

Coronacharityshop.png

Eine weitere Möglichkeit ist der Einkauf im CoronaCharityShop – alle Einnahmen gehen zu 100 % an die Tafeln. Herzlichen Dank für Ihre Unterstützung.

PHP/Tutorials/Templates/Alternativen

Aus SELFHTML-Wiki
< PHP‎ | Tutorials‎ | Templates
Wechseln zu: Navigation, Suche

Dateien einbinden[Bearbeiten]

Es gibt grundsätzlich vier verschiedene Möglichkeiten, Dateien einzubinden. Die Tabelle zeigt, welche der Funktionen bei welchen Anforderungen zum Einsatz kommen sollte.

Beachten Sie: Dateien, die keinen PHP-Code enthalten, sollten besser mit readfile() eingebunden werden. Das ist ressourcenschonender, weil diese Inhalte nicht vom PHP-Interpreter geparst werden müssen.
Die einzubindende Datei … … darf nur genau einmal verwendet werden … kann auch mehrfach verwendet werden
… muss unbedingt vorhanden sein require_once() require()
… darf auch fehlen include_once() include()

mögliche Fehler[Bearbeiten]

Die angeforderte Datei … … ist nicht vorhanden … wird mehrfach eingebunden
include() erzeugt eine Warnung
include_once() Rückgabewert TRUE
require_once() erzeugt einen Fehler
Programmabbruch
require()

Die Funktionen[Bearbeiten]

require_once()[Bearbeiten]

Die einzubindende Datei enthält eine PHP-Funktion, die für die Darstellung der Seite erforderlich ist, etwa weil sie die Verbindung zur Datenbank herstellt.

Würde man diese Datei versehentlich mehrfach einbinden, käme es bereits beim zweiten Mal zu einer Fehlermeldung, weil man eine vorhandene Funktion erneut definieren möchte. PHP bindet deshalb die Datei nur dann ein, wenn diese Datei bisher noch nicht eingebunden wurde.

require()[Bearbeiten]

Die einzubindende Datei ist für die Darstellung der Seite erforderlich, sie könnte aber auch an mehreren Stellen der Seite verwendet werden. Das kann etwa für Teile von Navigationen zutreffen.

include_once()[Bearbeiten]

In einem größeren Projekt soll mit Konstanten gearbeitet werden, die Einstellungen werden in einer Datei gespeichert. Es ist nicht schlimm, wenn die Datei fehlt, aber eine mehrfache Einbindung würde zu einem Fehler führen, weil auch Konstanten nur einmal definiert werden können.

include()[Bearbeiten]

Die einzubindende Datei ist für die Darstellung der Seite nicht erforderlich, sie kann auch an mehreren Stellen eingebunden sein. Das trifft etwa für die Auflistung von Produktdetails zu.

Sicherheit: Directory-Traversal-Lücken vorbeugen[Bearbeiten]

Achtung!

Das Einbinden von Dateien sollte niemals direkt auf der Grundlage von Benutzereingaben erfolgen.
selbstmord.php
include ($_GET['file']);
Auf diese Weise könnten Angreifer beliebige Dateien einbinden und deren Inhalt anzeigen, durch http://example.org/selbstmord.php?file=../../../../../etc/passwd könnte möglicherweise die Passwortdatei des Servers ausgegeben werden.

Solche Angriffsversuche werden Directory Traversal genannt und sie sind nicht etwa selten, sondern tägliches, automatisiert stattfindendes Geschehen und es gibt terabyteweise Benutzernamen, Passwörter und Bankdaten, die beweisen, dass grob nachlässig gehandelt wurde.

Einfach und effektiv absichern ließe sich obiger Code, indem beispielsweise erlaubte Dateien in einem Array notiert werden und der Dateiname dann über den Index aus dem Array gelesen wird, sodass kein Teil des Dateinamens durch einen Angreifer frei wählbar wäre:

$pages = ['info' => 'info.php', 'kontakt' => 'kontakt.php'];
if (isset($pages[$_GET['file']])) {
  include ($pages[$_GET['file']]);
} else {
  // Fehlerbehandlung, hier hat wohl wer einen ungültigen Parameter übergeben...
}

Weblinks[Bearbeiten]