Script sicher ?

Wipeout

Erfahrenes Mitglied
Moin, ich benutze folgendes Script zum includen meiner Scripte, bzw der html seiten.
Da ich einfach seiten hochladen möchte die dann automatisch angezeigt werden ist die sache so ansich schon super.
Meine Frage ist nun wie sicher ist dieses Script und in wie weit kann man es eventuell noch sicherer machen ?

PHP:
<?php
				if(empty($_GET['seite']))
				$_GET['seite'] = "news/index";
				if(file_exists("html/".$_GET['seite'].".html")) {
				include("html/".$_GET['seite'].".html");
				} else
				if(file_exists("php/".$_GET['seite'].".php")) {
				include("php/".$_GET['seite'].".php");
				} else {
				include("html/error.html");
				}
				?>

Switch anweisungen kommen nicht in frage, da ich wie oben schon gesagt habe, einfach ne html seite z.b. hochladen möchte und diese dann sofort benutzen kann.
 
Wie wäre es mit automatisch auslesen und so eine Whitelist erzeugen?

PHP:
<?php

$dir = './sec/';

foreach (array_merge(glob($dir.'*.php'), glob($dir.'*.html')) as $file)
{
  $files[] = $file;
}

if(in_array($dir.$_GET['seite'].'.html', $files))
{
  include($dir.$_GET['seite'].'.html');
}
else
{
  print 'Fehler. Sektion nicht vorhanden.';
}
?>
Wobei else bei dir natürlich der standard Fall sein sollte.
 
Wie wäre es mit automatisch auslesen und so eine Whitelist erzeugen?

PHP:
<?php

$dir = './sec/';

foreach (array_merge(glob($dir.'*.php'), glob($dir.'*.html')) as $file)
{
  $files[] = $file;
}

if(in_array($dir.$_GET['seite'].'.html', $files))
{
  include($dir.$_GET['seite'].'.html');
}
else
{
  print 'Fehler. Sektion nicht vorhanden.';
}
?>
Wobei else bei dir natürlich der standard Fall sein sollte.


Und wie sieht das aus wenn ich im Verzeichnis php z.b noch ein unterverzeichniss habe. weil das hab ich und bei den dateien kriege ich auch dauernd gesagt das die sektion nicht vorhanden sei.

@Gumbo
Ne nicht wirklich.
 
Zuletzt bearbeitet:
Hab das Script jetzt mal so umgeschrieben, damit er mir am anfang meine Hauptseite auch anzeigt, aber irgendwie klappt das nicht weil diese Datei halt in einem Unterverzeichniss von php liegt.

PHP:
if(empty($_GET['seite']))
{
	$_GET['seite'] = "news/index";
}
foreach (array_merge(glob("php/".'*.php'), glob("html/".'*.html')) as $file)
{
  $files[] = $file;
}
if(in_array("html/".$_GET['seite'].'.html', $files))
{
  include("html/".$_GET['seite'].'.html');
}
else
{
	if(in_array("php/".$_GET['seite'].'.php', $files))
{
  include("php/".$_GET['seite'].'.php');
}
else
{

  print 'Fehler. Sektion nicht vorhanden.';
}
}
 
Zuletzt bearbeitet:
Mach einfach Folgendes:
PHP:
$error = false;
if( empty($_GET['seite']) ) {
	$_GET['seite'] = 'news/index';
}
if( strpos($_GET['seite'], '..') !== false ) {
	$error = true;
}
if( !$error && ($absPath = realpath('html/'.$_GET['seite'].'.html')) !== false ) {
	readfile($absPath);
} else if( !$error && ($absPath = realpath('php/'.$_GET['seite'].'.php')) !== false ) {
	include $absPath;
} else {
	readfile('html/error.html');
}
 
Mach einfach Folgendes:
PHP:
$error = false;
if( empty($_GET['seite']) ) {
	$_GET['seite'] = 'news/index';
}
if( strpos($_GET['seite'], '..') !== false ) {
	$error = true;
}
if( !$error && ($absPath = realpath('html/'.$_GET['seite'].'.html')) !== false ) {
	readfile($absPath);
} else if( !$error && ($absPath = realpath('php/'.$_GET['seite'].'.php')) !== false ) {
	include $absPath;
} else {
	readfile('html/error.html');
}

Cool Danke, nun muss ich mich mal durch das Script durcharbeiten da sind ein paar sachen bei die ich noch nie gesehen habe ;)
 
Zurück