dedlfix: Ist diese Variable sicher???

Beitrag lesen

echo $begrüßung;

$verzeichnis = "..";
include("$verzeichnis"."includes/check.php");

Der obige Code befindet sich ganz am Anfang der Seite.
Ist die Variable $verzeichnis nun irgendwie unsicher und entsteht somit eine Sicherheitslücke?

Wenn du nur diese beiden Zeilen betrachtest, ist da keine Lücke zu erkennen. Lücken entstehen typischerweise, wenn man vergessen hat, einer Variablen einen Wert zuzuweisen, oder diese Zuweisung nur bedingt erfolgt (im if-Zweig, aber im else vergessen, oder umgekehrt), und man dann auf diese Variable lesend zugreift. Normalerweise erzeugt PHP bei einem lesenden Zugriff auf eine nicht existente Variable eine Notice-Meldung (error_reporting zum Entwickeln auf E_ALL stellen, display_errors auf on) und gibt null als Wert zurück. Soweit kein Problem, das null wird je nach Umfeld in einen Leerstring oder nach 0 umgewandelt. Das Problem entsteht erst dann, wenn es jemandem gelingt, diese Variable vorher zu erzeugen und ihr einen Wert zuzuweisen. Das kann mit dem Feature register_globals erfolgen oder auch von eigenen Programmteilen, die den gleichen Variablennamen verwenden. Es ist deshalb aus nicht nur aus Sicherheitsgründen ratsam, auf eine explizite Variableninitialisierung nicht zu verzichten.

Muss ich aus der $verzeichnis Variablen eine Kontante machen?

Muss nicht, aber wenn dieser Wert nicht veränderlich ist, braucht man keinen Container für veränderliche Werte (sprich: eine Variable), sondern kann diesen konstanten Wert auch in der dafür vorgesehenen Weise verwenden.

define('VERZEICHNIS', '..');
include("VERZEICHNIS"."includes/check.php");

Zeichenketten werden mit "" (oder '') eingerahmt. Variablennamen und Konstantennamen stehen einfach so da. Nur bei Variablennamen, die in ""-Strings notiert werden, erkennt PHP diese als Variablen. Alle anderen Zeichen werden so interpretiert, wie sie dort stehen.

echo "$verabschiedung $name";