Zum Inhalt springen
← Netzwerke
WE

WebfricklerVZ

Hobbys und Interessen♛Torstengegründet 2008 · 9 Mitglieder

Für dich sind die Wörter Web2.0, Photoshop, AJAX, HTML und CSS nicht fremd? Ja dann...komm\' in unser Netzwerk. Hier wird gebloggt, was bei drei nicht durch den Ether gegangen ist. ;)

Offen. Klick, und du bist drin.

← WebfricklerVZ

PHP: header() und die Sicherheit

TorstenTorsten08.05.2008, 15:56
Eine sehr einfache Methode, um bestimmte Benutzergruppen in bestimmte (geschützte) Bereiche zu delegieren ist die Abfrage einer Session-Variable und danach das Weiterleiten per header(). Ich hab da mal ein kleines Code-Beispiel vorbereitet, was das ganze etwas anschaulicher macht.

Beispiel
<?php
if(!$_SESSION[\'admin\']) {
   header(\'location: login.php\');
}
echo \"Hallo Admin, Willkommen im Adminpanel\";
?>


Das funktioniert auch soweit, sofern die Session-Variable \"admin\" gesetzt ist. Ist dies nicht der Fall, dann wird aufs Login-Formular (login.php) verwiesen. Allerdings liegt der Knackpunkt offenbar in der
Weiterverarbeitung nach header(). Denn der Webserver parsed den kompletten PHP-Code (also auch das \"Hallo Admin...\" und sendet diesen weiter an den Client, wird aber eben durch den Browser (aufgrund dessen, dass er sich am gesendeten HTTP-Header orientiert) nicht dargestellt.

Durch den Einsatz Art-ähnlicher Software geht das aber schon. Das lässt sich zum Beispiel mit Netcat recht einfach nachprüfen, wenn man das Scriptbeispiel auf dem eigenen Webserver ausprobiert. Das heisst also, dies könnte als potenzielle Schwachstelle genutzt werden, um unauthorisiert in geschützte Bereiche zu gelangen bzw. die Daten darin auszulesen.

Das ist aber kein großes Problem und lässt sich mit nur einem kleinen Aufruf beheben. Mit exit() wird die Weiterverarbeitung des Scriptes gestoppt. Damit werden auch nachfolgende Zeilen nicht mehr geparsed und an Browser respektive oder andere Clients gesendet. Im Beispiel schaut das dann so aus:

Beispiel
<?php

if(!$_SESSION[\'admin\']) {
   header(\'location: login.php\');
   exit() //Weiterverarbeitung stoppen
}
echo \"Hallo Admin, Willkommen im Adminpanel\";
?>


Das war\'s auch schon. Vielleicht habt ihr das hier und da schonmal gesehen und euch gefragt, warum und wieso. Nunja, hier habt ihr nun die Erklärung. 🙂
Kommentare 2
  • 0
    zOiD1. Kommentar

    MOTO

    Congratulations Torsten,

    you have been declared Master Of The Obvious!

    😉
  • 0
    Torsten

    Frofis wissen das natürlich

    Aber wir haben ja auch Neuanfänger im Forum, die das vielleicht hier und da schonmal gesehen haben, aber den Zusammenhang noch nicht kannten.

    P.S.: Oder hab ich deinen Post falsch gedeutet? :>
??
öffentlich · unter dem Artikel
als … · +2 PLoints
Womit willst du anfangen?
2.000 Zeichen, öffentlich, bleibt im Archiv.
0 / 2.000 Zeichen
Enter = Zeilenumbruch · Strg+Enter = senden