404 für php-Url

  • Themenstarter Themenstarter Comenius
  • Beginndatum Beginndatum
C

Comenius

Grüße Euch,

ich lade per Abfrage der URL den entsprechenden Content in meine Seite:

$content = $_GET[content];
[...]
include("$content.php");

Nun ist es so, dass bei manueller Bearbeitung der URL (solche Spaßvögel gibt es immer) ein Wert eingegeben werden könnte, der gar nicht auf meinem Webspace existiert. Sprich, PHP liefert einen schönen Fehler alla "No such file or directory" zurück.

Um dies zu verhindern, möchte ich gerne mit Hilfe einer Art 404-Error und nicht mit dieser unschönen PHP-Ausgabe auf selbigen Fehler hinweisen.

Nun ist das meines Wissens allerdings nicht möglich, da ich meine URL in der Form "?content=xyz" generiere.

Natürlich könnte man den Ordner durchsuchen und abfragen, ob eine Datei mit dem angegebenen Namen existiert - allerdings scheint mir das ein bisschen zu umfangreich und würde nur zu Leistungsverlust führen.

Meine Überlegung ging jetzt in Richtung htaccess. Könnte man dort etwas erreichen? - habe bisher nicht so viel an der Datei gearbeitet und frage lieber hier im Forum nach.

Dankeschön

Commi
 
Ich löse sowas mit switch-case

PHP:
switch($_GET['content']) {
  case "inhalt1":
    include("inhalt1.php");
    break;
  case "inhalt2":
    include("inhalt2.php");
    break;
  default:
    include("404.php");
    break;
}



Gruß
 
Du scheinst den Benutzern ja ganz schön viel Vertrauen entgegen zu bringen. Denn Benutzereingaben ungeprüft in die Verarbeitung einzubinden, ist ein gravierendes Sicherheitsrisiko!
PHP:
if (!isset($_GET['content'])) {
	// weist Anfrage als fehlerhaft zurück
	// alternativ: Initialisierung mit dem Standardwert
	// $_GET['content'] = 'default';
	header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request');
	exit;
}
$content = $_GET['content'];
if (!($content=realpath($content.'.php') || $content == __FILE__) {
	header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
	// hier kann zusätzlich noch das Fehlerdokument ausgegeben werden
	exit;
}

// …

include $content.'.php';
 
Das man das so problemlos mit PHP lösen kann, war mir nicht bekannt - danke dafür.

@Gumbo:

Natürlich sichere ich mich ab - habe es aber der Übersicht halber nicht mitgepostet. :)

Dankeschön, Problem gelöst.

Gruss

Commi

Edit: Sorry Gumbo - habe es falsch verstanden, Du hast Recht! Du hast auf die PHP-Ausgabe bei einer nicht vorhandenen Datei angespielt. Von Daher war das nur ein Hinweis auf mein eigentliches Problem. Danke!
 
Zuletzt bearbeitet von einem Moderator:
Zurück