PHP: header() und die Sicherheit
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
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
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. 🙂
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. 🙂
Comments 2
- 0
- 0
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? :>
??
public · under the article
as … · +2 PLoints
Where do you want to start?
2,000 characters, public, stays in the archive.
0 / 2,000 characters
Enter = new line · Ctrl+Enter = send
