PHPでユーザーをリダイレクトする場合は、ヘッダー関数を使用できます。
_header('Location: http://smowhere.com');
_
他のphpコードの実行を防ぐために、header
呼び出しの後に_exit;
_を置くことも良い習慣であることもよく知られています。だから私の質問は:header-location呼び出し後のコードを効果的に実行できるでしょうか?どの場合に?悪意のあるユーザーはheader('Location..')
の呼び出しを完全に無視できますか?どうやって?
header-location呼び出し後のコードを効果的に実行できますか?
はい、いつも。 header
は、1行のデータaskingリダイレクトするブラウザです。ページの残りの部分まだ提供されます by PHPで、header
コマンドの実行を防ぐだけでクライアントが見ることができます。
これは、たとえばwget
のようなコマンドラインクライアントを使用する場合、リダイレクトを追跡しないように指示するだけで十分簡単です。
結論:阻止しない場合、PHPはheader
を呼び出した後でも本文全体を送信します。その本文は特別なハッキングなしで受信者に完全に利用可能ですスキル。
リダイレクトするが、しない場合die()
/exit()
コードは常に実行および表示されます。
次の例を見てください。
admin.php:
if (authenticationFails)
{
// redirect and don't die
}
// show admin stuff
ロケーションヘッダーeveryの後で実行を確実に終了しない場合、ユーザーがアクセスできます。
header()
instructs PHP HTTPヘッダーを送信する必要がある... HTTPヘッダーが送信されるとき。
そして、これらはheader()への呼び出しを書き込んだときにすぐに送信されるのではなく、送信するときです(通常、PHPが応答の本文の送信を開始する必要がある場合-これは、_output_buffering
_が有効になっている場合)、予想よりも遅くなる可能性があります)。
したがって、header()
を呼び出すだけの場合は、exit
/die
を使用して、このステートメントの後に記述されたコードが実行されないことを絶対に保証する必要があります。
ユーザーは、必要に応じてLocation
ヘッダーを無視できます。しかし、header()
の呼び出し後のコードが実行される場合とされない場合があるという事実については何も変更されません。これはサーバー側の問題です。
Exit呼び出しがない場合、スクリプトが終了する正確な時点は次の2つの要素に分類されます。
ブラウザがLocationヘッダーが通過したことを確認した瞬間に、リダイレクトアクションをすぐに開始するとします。つまり、リダイレクト元の接続がシャットダウンされるため、新しい場所への接続を開始できます。これは通常、Webサーバーがリダイレクトスクリプトを終了することを意味します。ただし、ヘッダーがサーバーからクライアントに移動するのにかかる時間が長く、クライアントがサーバーから移動するTCPリンクのシャットダウンプロセスは、スクリプトが実行し続けることができる時間です。
Header()の後のPHPコードが実行されます。しかし、php.netの example が示すように、それが必要になる場合もあります。そうでないことを確認するには、プログラムフローを完全に終了します。
re:header-location呼び出し後のコードを効果的に実行できますか?
スクリプトを閉じない場合は、はい。
re:どちらの場合ですか?
すべての場合に。
悪意のあるユーザーがheader( 'Location ..')の呼び出しを完全に無視できるか?
いいえ、それはユーザーが問題について発言権を持たないことを強要されます。