if (file_exists("pages/$page.php")) {
include($page.'.php');
}
Ist das sicher?
Mit sicher meine ich, dass man keine externen Skripte einbinden kann
if (file_exists("pages/$page.php")) {
include($page.'.php');
}
Ist das sicher?
Mit sicher meine ich, dass man keine externen Skripte einbinden kann
Sicherlich nicht, besonders wenn $page = "./configuration"
Ich würde empfehlen, es mit etwas wie diesem zu ersetzen:
$pages = array("blog", "home", "login");
if (in_array(strtolower($page), $pages))
include("pages/$page.php");
EDIT: Sie können diese Liste akzeptabler Seiten mit diesem Code generieren.
$pages = array();
if ($dh = opendir("pages")) {
while (($file = readdir($dh)) !== false) {
if (strstr($file, ".php") !== false) // stellen Sie sicher, dass es eine .php-Datei ist
$pages[] = substr($file, -4); // entfernen Sie die .php
}
closedir($dh);
}
Der von Ihnen gepostete Code enthält meines Erachtens einen Tippfehler. Es sollte sein:
if (file_exists("pages/$page.php")) {
include("pages/$page.php");
}
Es kann jedoch zu Code-Injektion führen, wenn die PHP-Einstellungen dies zulassen, einschließlich der remote-Datei-Einbindung.
Sie müssen sicherstellen, dass die Seite, die Sie einbinden, nicht beliebig ist.
In der Regel finden Sie diesen Code-Typ in einer "Loader" -Klasse, die die Factory-Methode verwendet. In guten Implementierungen beschränkt sie jedoch die Dateien und Klassen, die sie laden wird, auf ein bestimmtes Verzeichnis oder auf eine bestimmte vordefinierte Dateisammlung.
Wenn $page nie festgelegt ist, wird PHP dann versuchen, herauszufinden, was es sein könnte, indem es der Variablenreihenfolge innerhalb Ihrer php.ini folgt. Diese Direktive teilt PHP mit, in welcher Reihenfolge Variablen gefunden werden sollen. Da das Standardverhalten für dies EGPCS ist, kann ein listiger Hacker dann Ihr Skript aufrufen und ihm sagen, eine Datei einzuschließen, auf die PHP zugreifen kann.
Zum Beispiel:
www.example.com/?page=dbConfig.ini
Das Speichern aller möglichen Seitennamen in einem Array ist der sicherste Ansatz, aber Sie können auch relativ sicher sein, indem Sie einfach den bereitgestellten Seitennamen validieren und sicherstellen, dass Sie keine "gefährlichen" Dateien in Ihrem Seitenverzeichnis haben.
$page = basename($_GET['page']);
if (file_exists("pages/$page")) {
include("pages/$page");
} else {
include("pages/default.php");
}
Verwenden Sie basename($_REQUEST['page']), um potenziellen Zugriff auf andere Verzeichnisse zu verhindern, und überprüfen Sie dann, ob es existiert.
http://php.mirror.facebook.net/manual/de/function.basename.php
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Ich denke, Ihr spezifischer Code ist sicher, da Sie immer nach einer PHP-Datei suchen und sich im Seitenverzeichnis befinden. Stellen Sie nur sicher, dass Sie sie nicht aus Versehen irgendwo verpassen.