PHP は header() 関数で使用するためにユーザーデータをサニタイズします 質問する

PHP は header() 関数で使用するためにユーザーデータをサニタイズします 質問する

PHP の header() 関数内でユーザー データを使用するために、ユーザー データに対して実行する必要があるエスケープ ルーチンはありますか?
たとえば、MySQL の場合、ユーザー データを DB に送信する前に mysql_real_escape_string() を実行し、HTML での出力の場合は htmlspecialchars() を実行します... どちらも、最初に他の処理を実行するために独自のカスタム関数でラップされます。

しかし、PHP の header() 関数の場合は、何を行う必要がありますか? エスケープする必要がある危険な文字はありますか?

私はこのようなことをしようとしています...クエリ文字列をheader()に追加して別のページにリダイレクトします

if ( strlen($_SERVER['QUERY_STRING']) > 0) {
$query_string = '?'.$_SERVER['QUERY_STRING'];
}
header('Location: http://domain.com/activate.php'.$query_string);
exit();

header() 関数でエスケープする必要があるものについて、何か情報をお持ちの方はいらっしゃいますか? コロンとセミコロンの文字は、header() ステートメントにとって常に非常に重要であるようです。これらをエスケープする必要がありますか?

ベストアンサー1

いいえ、PHP >= 4.4.2 (PHP4 の場合) および >= 5.1.2 (PHP5 の場合) を使用している限り、自分自身を保護するために必要なことは何もありません。

見るドキュメントheader()。 具体的には:

この機能により、ヘッダー インジェクション攻撃に対する保護として、一度に複数のヘッダーが送信されるのを防ぐことができます。

だから、何かから逃げる必要などないのだロケーションヘッダー\r以前のバージョンを使用している場合は、すべてのand文字をエスケープする必要があります\n(ヘッダー挿入を防ぐため)。

また、しない urlencodeクエリ文字列。送信されるデータの意味が壊れてしまいます。そのまま全文を追加してください。

おすすめ記事