Sicherheit der Page
-
Moin zusammen,
Ich habe ein Tips im Netz gefunden welcher verhindern soll das nur "registrierte" include-Files akzeptiert werden:
$incArray = array(); $incDir = "includes/"; $dirHnd = opendir ($incDir); while ($incFiles = readdir ($dirHnd)) { if($incFiles != "." && $incFiles != "..") { $registered = str_replace(".inc.php", "", $incFiles); $incArray[] = $registered; } } closedir($dirHnd); if (isset($_GET['id']) && in_array($_GET['id'], $incArray)) { include($incDir.$_GET['id'].".inc.php"); } else { include($incDir."start.inc.php"); }
Meine Frage betrifft nun includes die nicht von der übermittelten ID abhängig sind... kann ich die einfach includieren oder bieten die auch schon angriffsfläche?
Vielen Dank im Vorraus!
-
In diesem (viel zu umständlichen) Codeausschnitt geht es darum, dass nicht durch bestimmte Werte von $_GET['id'] unerlaubte/private Dateien geöffnet werden. Mit normalen Includes kannst du nach wie vor arbeiten, sofern sie nicht von Variablen abhängig sind, die Websitebenutzer beeinflussen können:
require './pfad/datei.php';
Ich bevorzuge require, da das Script abgebrochen wird, sollte die Datei nicht vorhanden sein.
-
okay, ich danke dir vielmals!
Ich habe auch gerade Erfahren dass include, include_once und require Statements und nicht Funktionen sind, also ist auch das im Script falsch geschrieben.
Wieso willst Du lieber einen "Fatal error" als ein nicht ausgeführtes IncludeFile?
-
Man kann durchaus auch require() statt require verwenden.
Wenn eine Includedatei nicht geöffnet werden konnte (z.B. eine Konfigurationsdatei), dann wird der restliche Code auch nicht funktionieren, also wieso erst ausführen und weitere Fehler produzieren?
-
Tatsächlich können in wirklichen Projenkten beide friedlich nebeneinander auftauchen:
Wenn z.B. Die Konfigurationsdatei xyz nicht gelesen werden kann, ist es vielleicht sinnvoll, die Voreinstellungen zu laden;
Wenn aber die (eigene) Bibliothek mit den verarbeitenden Funktionen nicht gefunden wird, kann man nichts machen.Also bitte keine dogmatischen Streite zu beginnen!