Querystring
Daniela
- php
2 dedlfix
Hallo,
ich bin noch recht neu mit PHP und will wissen ob die Verarbeitung eines Querystrings via PHP aus Sicherheitsaspekten so ausreichend ist (wenn man den übergebenen String im Dokument weiterverarbeiten möchte):
if($_SERVER["QUERY_STRING"] != ""){
$querystr = "?".strip_tags($_SERVER["QUERY_STRING"]);
}
echo '<a href="andereseite.php'.$querystr.'&neuerparameter=x" >Link</a>';
Danke
Daniela
Hi!
[..] ob die Verarbeitung eines Querystrings via PHP aus Sicherheitsaspekten so ausreichend ist (wenn man den übergebenen String im Dokument weiterverarbeiten möchte):
$querystr = "?".strip_tags($_SERVER["QUERY_STRING"]);
Das Entfernen von unerwünschten Inhalten ist eine Möglichkeit, sie loszuwerden.
echo '<a href="andereseite.php'.$querystr.'&neuerparameter=x" >Link</a>';
Viel wichtiger aber ist es, Werte beim Einfügen in andere Kontexte diesem neuen Kontext gemäß zu behandeln. Denn auch in "gutartigen" Daten können sich Zeichen befinden, die im neuen Kontext eine Sonderbedeutung haben. Siehe Kontextwechsel-Artikel.
Konkret hast du hier zunächst einen URL-Kontext. Das "x" müsste schonmal URL-kodiert werden (ebenso "neuerparameter", wenn er andere Zeichen außer ASCII-Buchstaben und Ziffern enthielte.) Das = und das & müssen im URL-Kontext unverändert stehenbleiben. Der Querystring kann alles mögliche enthalten, da du ihn weder syntaktisch prüfst oder auftrennst um nur die erwünschten Teile weiterzuverarbeiten, musst du dich darauf verlassen, dass er in inhaltlich Ordnung ist. Du darfst ihn auch nicht URL-behandeln, wenn die enthaltenen Sonderzeichen ihre Bedeutung behalten sollen.
Nun hast du eine URL zusammengestellt und willst sie in einen HTML-Kontext einfügen, wobei du dessen Gegebenheiten zu beachten hast. htmlspecialchars($kompletteURL) kümmert sich um die ordnungsgemäße Behandlung.
Und damit ist bis hierhin nichts sicherheitstechnisches zu beanstanden. Was allerdings andereseite.php mit dem Querystring anstellt, steht auf einem anderen Blatt.
Lo!