2010-12-14 5 views
0

Warum würde $ _SERVER ['PHP_SELF'] einen Dateinamen in einer Instanz als /test/foo.bar und eine andere Instanz (ausgeführt vom selben PHP-Skript) zurückgeben //test/foo.bar (mit doppelt führenden Schrägstrichen)?

form.php sendet $ _GET an login.php. login.php Umleitungen an

header ('Location: test/foo.bar') 

foo.bar umfasst:

$page = filter_var($_SERVER['SCRIPT_NAME'], FILTER_SANITIZE_STRING); 

(Außerdem kann ich es nicht replizieren auf Nachfrage.)

+0

Können Sie Code anzeigen? Es ist sehr unwahrscheinlich, dass sich die Variable selbst ändert. –

Antwort

1

Ich würde vermuten, dass Sie irgendwo im Code Links erstellen (oder vielleicht hat jemand einfach einen zusätzlichen Schrägstrich irgendwo eingegeben). Sie könnten einige Codes in diese Richtung haben:

function buildLink($site, $relPath, $text) { 
    return "<a href=\"$site/$relPath\">$text</a>"; 
} 

Wenn $site mit einem Schrägstrich in einigen Fällen übergeben, dann würden Sie mit dem führenden doppelten Schrägstrich am Ende, wenn der Servername wurde entfernt. Oder wenn ein absoluter Pfad übergeben wurde. Ein zusätzlicher Schrägstrich beeinflusst nicht, welche Seite angezeigt wird, aber sie würde immer noch in der geparsten URL angezeigt.

+0

Jetzt den zusätzlichen Schrägstrich absuchen. Danke. – tgrass

+0

Es gefunden. Danke für die Hilfe. – tgrass

1

Der Wert $_SERVER['PHP_SELF'] hängt von der tatsächlichen Anfrage vom Kunden gesendet. Apache erlaubt mehrere Schrägstriche zwischen Verzeichnisnamen, so behandelt es http://example/foo.php das gleiche wie http://example//foo.php - beide werden foo.php aufrufen, aber die Anfrage-URI wird enthalten, was auch immer der Client angefordert hat.

Wenn Ihr Skript nur einen Schrägstrich erwartet, müssen Sie die restlichen manuell entfernen.

+0

Vielen Dank. Irgendeine Idee, warum der gleiche Browser auf demselben Client-Computer die gleiche Datei mit einem dann zwei führenden Schrägstrichen anfordern würde? – tgrass

+1

@tgrass - Schau dir die Links an, über die sie kamen, um dorthin zu gelangen. Den Wert von '$ _SERVER ['HTTP_REFERER']' zusammen mit der PHP_SELF zu speichern, kann Ihnen helfen, das Problem zu finden. –

0

Sie könnten versuchen, $ _SERVER ['SCRIPT_NAME'] zu verwenden. Beachten Sie, dass PHP_SELF für einige Arten von Angriffen anfällig ist. Seien Sie also vorsichtig, wenn Sie es verwenden. Sie müssen es so behandeln, als wäre es eine vom Benutzer bereitgestellte Eingabe.

+0

Ersetzt durch SCRIPT_NAME und gibt immer noch die beiden führenden Schrägstriche zurück. – tgrass

+0

müssen wir mehr Code sehen. da ist noch etwas anderes im Spiel – profitphp

Verwandte Themen