Frage zu PHP-Tutorial "Sichere php include() Links"

siehe http://www.tutorials.de/forum/php-tutorials/285840-sichere-php-include-links.html

wie müsste man die beiden dinge denn richtig machen?

ist es so wie ich es bisher hatte auch sicher, oder eher nicht?

PHP:
$id=$_GET['id'];
switch($id) {
case news: include("news.php"); break;
case download: include("download.htm"); break;
default: include("news.php"); break;
}

sollte sicher sein, da du ja default gesetzt hast. Nur wird es mit der Zeit ziemlich lang, bei tausend Seiten. Ich mache es immer so, Vorraussetzung du nimmst Smarty, aber das kannst du ja schnell ändern.:rolleyes:

PHP:
define('NAMEDIR', dirname(dirname(__FILE__)));

$_site = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'home';

//$site_arr entweder statisch wie hier oder aus der Datenbank
$site_arr = array('home', $seite1, $seite2);

if(!in_array($_site, $site_arr)){
   $_site = 'error';
}else{
   if(!file_exists(NAMEDIR.'/inc/'.$_site.'.inc.php')){
      $_site = 'error';
   }
}
require_once(NAMEDIR.'/inc/'.$_site.'.inc.php');
$smarty->display($_site.'.tpl');
 
Zuletzt bearbeitet von einem Moderator:
Das switch kannst du dir sparen:
PHP:
include('' .$id. '.php');
Müsstest du halt noch deine .htm-Dateien in .php umbenennen.
 
Womit Benutzereingaben ungeprüft in die Anwendungslogik einbezogen werden. So können in diesem Fall beliebige Pfade angegeben und somit beliebige Dateien eingebunden werden, was gravierende Auswirkungen auf die Sicherheit haben kann. Wenn das Einbinden von entfernten Ressourcen erlaubt ist, können sogar PHP-Skripte fremder Server auf dem Zielserver ausgeführt werden – mit sämtlichen Privilegien.
Und gerade das sollte ja vermieden werden.

Informiere dich diesbezüglich mal über Sicherheitslücken wie Remote File Inclusion und Directory Traversal.
 
Auch wenn es einfacher wäre, nur zu prüfen, ob die angegebene Datei in dem angegebenen Verzeichnis vorhanden ist, können damit auch nur Dateien des angegebenen Verzeichnisses aufgerufen werden. Mit etwas „Glück“ aber auch die aufgerufene Datei selbst, was zu einer Rekursion führt.
 
Ich habe damals die Methode hier angewendet bei meiner HP
http://www.tutorials.de/forum/php-c...en-ausserhalb-des-docroot.htmlangewendet.html (nur auf meine bedürfnisse etwas angepasst)
jetzt meine frage is das sollte doch eigentlich genügen oder ?

mfg Spikaner

ist das dasselbe, nur halt dynamischer. Die Frage ist ob man es will, aber es ist sicher. Ich frage mich nur warum ihr alle include benutzt? Hier mal meine Variante, schnell das Verzeichnis zu durchsuchen.

PHP:
define('NAMEDIR', dirname(dirname(__FILE__)));

$_site = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'home';

$site_arr = array();

$inc_dir = opendir (NAMEDIR.'/inc');
while ($inc = readdir ($inc_dir)){
   if($inc != '.' && $inc != '..'){
      $short_inc = str_replace('.inc.php', '', $inc);
      array_push ($site_arr, $short_inc);
   }
}
closedir($inc_dir);

if(!in_array($_site, $site_arr)){
   $_site = 'error';
}
require_once(NAMEDIR.'/inc/'.$_site.'.inc.php');
$smarty->display($_site.'.tpl');

echo Gruss
 
Zuletzt bearbeitet von einem Moderator:
Ich arbeite zusätzlich mit preg_match() ,sprich ich fillter alle Sonderzeichen etc. heraus, die meine Dateinamen nie haben werden, bei meinen mom. lernstand das sicherste was ich bis jetzt kenne aber über ein paar bsp. wie es noch besser geht wäre ich auch dankbar.

mfg Spikaner
 
Auch wenn es einfacher wäre, nur zu prüfen, ob die angegebene Datei in dem angegebenen Verzeichnis vorhanden ist, können damit auch nur Dateien des angegebenen Verzeichnisses aufgerufen werden.

Das verstehe ich, macht doch aber auch Sinn seine includes in einen verzeichniss zu haben.

Mit etwas „Glück“ aber auch die aufgerufene Datei selbst, was zu einer Rekursion führt.

das verstehe ich nicht ganz...

Gruss
 
Zurück