2010-12-14 11 views
0

なぜ$ _SERVER ['PHP_SELF']は/test/foo.barと別のインスタンス(同じPHPスクリプトから実行される)としてファイル名を返します//test/foo.bar(二重のスラッシュが先頭に付きます)?

form.phpがlogin.phpに$ _GETを送信します。 login.phpは

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

にリダイレクトfoo.barが含まれています:

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

また、私はオンデマンドでそれを複製することはできません。)

+0

いくつかのコードを表示できますか?変数自体が変更する可能性はほとんどありません –

答えて

1

私はあなたがどこかでコードのリンクを構築していると思います(あるいは、ちょっと余計なスラッシュを入力した人かもしれません)。 $siteは、いくつかのケースでは、末尾のスラッシュで渡された場合、サーバー名が削除されたとき、あなたは一流ダブルスラッシュで終わるだろう

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

:あなたはこれらの線に沿っていくつかのコードを持っているかもしれません。または、絶対パスが渡された場合、余分なスラッシュは表示されるページに影響しませんが、解析されたURLにはまだ表示されます。

+0

余分なスラッシュのための精練。どうも。 – tgrass

+0

見つけました。助けてくれてありがとう。 – tgrass

1

$_SERVER['PHP_SELF']の値が実際の要求に依存しますクライアントから送信されます。 Apacheはディレクトリ名の間に複数のスラッシュを許可するので、はhttp://example//foo.phpと同じ扱いになります。どちらもfoo.phpを呼び出しますが、要求URIにはクライアントが要求したものがすべて含まれます。

スクリプトでスラッシュが1つしか必要ない場合は、手動で残りの部分を削除する必要があります。

+0

ありがとうございます。同じクライアントコンピュータ上の同じブラウザが同じファイルを1つのスラッシュと2つのスラッシュで要求する理由は何ですか? – tgrass

+1

@tgrass - そこに行くために彼らが続いたリンクを見てください。 '$ _SERVER ['HTTP_REFERER']'の値をPHP_SELFと共にダンプすることで、問題を見つけるのに役立ちます。 –

0

$ _SERVER ['SCRIPT_NAME']を試すことができます。 PHP_SELFはいくつかのタイプの攻撃に対して脆弱であるので注意してください。ユーザーが入力したものと同じように扱わなければなりません。

+0

SCRIPT_NAMEに置き換えられ、それでも2つの先頭のスラッシュが返されます。 – tgrass

+0

より多くのコードを見る必要があります。ここに何か他のものがあります – profitphp

関連する問題