Nicht includefähiges Script -> Includefähiges Script

Hallo,
probier es mal so:
PHP:
<?php
    $site = (empty($_GET['site'])) ? 'home' : $_GET['site'];

    if (is_readable($site.'.php')){
        include($site.'.php');
    } else {
        include('error.php');
    }
?>

mfg
forsterm
 
anhand von GET Parametern ohne Prüfung Dateien einzubinden ist:
EVIL EVIL EVIL EVIL EVIL


Prüfe sämmtliche Daten. Allgemein ist es keine gute Idee Scripte anhand von Get Parameter einzubinden.

Suche besser einen anderen Weg, auch wenn das 2-3 Zeilen mehr Code bedeutet.
 
Hier die zusätzlichen zwei bis drei Zeilen:
PHP:
$page = !empty($_GET['page']) ? basename($_GET['page']).'.php' : 'default';

if( file_exists($page) && is_readable($page) && realpath($page)!=$_SERVER['SCRIPT_FILENAME'] ) {
	include $page;
} else {
	header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true);
	include 'error.php';
}
Besser wäre es noch, wenn sich alle erlaubten Dateien in einem eigenen Verzeichnis befinden.
 
Wenn ich das letzere Versuche geht garnichts mehr.. Also auch die normalen Seiten laden nicht mehr... (Ich weiß im übrigen auch nicht wirklich nicht was das bedeutet, ich möchte auch mit Php nur includen, bin sonst ein absoluter voll xD)

So siehts bei mir aus:

PHP:
<?php
$page = !empty($_GET['page']) ? basename($_GET['page']).'.php' : 'default';

if( file_exists($page) && is_readable($page) && realpath($page)!=$_SERVER['SCRIPT_FILENAME'] ) {
    include $page;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true);
    include 'error.php';
}
?>

Fehlermeldung:


Warning: Cannot modify header information - headers already sent by (output started at D:\Programme\Xampp\xampp\htdocs\bp\index.php:11) in D:\Programme\Xampp\xampp\htdocs\bp\index.php on line 37

Warning: include(error.php) [function.include]: failed to open stream: No such file or directory in D:\Programme\Xampp\xampp\htdocs\bp\index.php on line 38

Warning: include() [function.include]: Failed opening 'error.php' for inclusion (include_path='.;D:\Programme\Xampp\xampp\php\pear\') in D:\Programme\Xampp\xampp\htdocs\bp\index.php on line 38

Allerdings weiß ich auch garnicht wo dann die seite rein soll, die als erste mitgeladen wird, also die home.php... Das muss doch auch noch mit da rein.. *Bahnhof*^^
 
Du machst eine Ausgabe bevor du
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true);

deinen Header setzt. Das ist nicht in Ordnung.
Prüfe wo genau, oft ists nicht sichtbar ;)

PS: Mein Evil Evil Evil ist kein Spam, sondern ein auf die Nase stüpsen. Was Gumbo dir da gepostet hat solltest beherzigen.
 
Ich glaube, ich könnte dir auch empfehlen, zuerst die Festplatte neu zu formatieren und du würdest es ohne Nachfragen machen, oder?
 
häää?^^ Sagt mir doch einfach wie ich includen soll^^ :D:D:D

Ich war verwirrt... Doch was bin ich jetzt?^^ Verwirter als vorher auf jeden fall....
 
Das Problem bei deinem Versuch war, dass bereits eine Ausgabe erfolgte und der HTTP-Header der Antwort somit nicht mehr verändert werden konnte. Daher muss der Code-Schnipsel am Anfang des Skriptes stehen, etwa:
PHP:
<?php

	$page = !empty($_GET['page']) ? basename($_GET['page']).'.php' : 'default';

	$_SERVER['RESPONSE_STATUS_CODE'] = null;
	if( !file_exists($page) || !is_readable($page) || realpath($page)==$_SERVER['SCRIPT_FILENAME'] ) {
		header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true);
		$_SERVER['RESPONSE_STATUS_CODE'] = 404;
	}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
…

<?php

	switch( $_SERVER['RESPONSE_STATUS_CODE'] ) {
		case 404:
			include 'error-404.php';
			break;
		default:
			include $page;
	}

?>
Ich hoffe, es funktioniert.
 
Paradise4Sims hat gesagt.:
Was hälst du denn davon wenn ich dir den ganzen Schmarrn mal schicke?
Davon halte ich nicht viel. Was genau klappt denn immer noch nicht? Eine etwas genauere Fehlerbeschreibung wäre hilfreich.
 
Zurück