header location (sicherheit parameterübergabe)

versuch13

Erfahrenes Mitglied
Ich habe gelesen dass Sicherheitsrisiken bestehen wenn man eine Weiterleitung per
header realisiert und Benutzer Parameter manipulieren.

Also ich habe eine Datei die aufgerufen wird,
HTML:
domain.de/redirect.php?u=http://www.google.de/
u kann eine Eingabe des Users sein. Ist es ausreichend wenn ich urlencode darauf anwende?

Danke.
 
Wenn du urlencode() nutzt, erhältst du einen verfälschten Wert, da nicht nur die Metazeichen eines HTTP-Header-Feldwerts maskiert werden. Dies ist nämlich nur die Zeilenumbruchsequenz 0x0D0A. Es reicht also die Zeilenumbruchzeichen zu ersetzen:
PHP:
str_replace("\r", '%0D', str_replace("\n", '%0A', $str))
 
Danke, Gumbo. Nur eine kurze Frage noch. Durch was werden die Zeichen hier ersetzt?
Für was steht %0D und %0A? Vielleicht kann mir das wer noch genau erklären damit ich auch weiß was da vor sich geht. Hätte denn

PHP:
str_replace("\r", '', str_replace("\n", '', $str))

nicht dieselbe Wirkung?

Danke.
 
Ja, nur weshalb ersetzt man diese Werte und entfernt sie nicht einfach?
Ein URI kann dieses Werte doch sowieso nicht enthalten oder? Man könnte
dann doch eigentlich auch \r\n einfach nur entfernen oder mißverstehe ich da
etwas?
 
nunja... das müsstest du eigentlich nicht, es würde schon ausreichen wenn du alle Backslashes nach %5C konvertieren würdest dann is das r oder inkl. n und das dahinter stehende kommando, nicht mehr von bedeutung. Ich hätte es so gemacht:

PHP:
function mkclear($src) {

return preg_replace("~([\x25][a-f0-9]{2,}){1,}~i", "", $src);

}
 
Das ist richtig, die Zeichen 0x0A und 0x0D sind in URLs nicht erlaubt sondern müssten entsprechend kodiert werden (%0A und %0D). Sie zu entfernen würde zwar auch vorm Einschleusen von Schadcode bewahren, würde aber gleichzeitig auch die URL verfälschen.
 
Zurück