私は、Web アプリケーションの前で Apache httpd をリバース プロキシとして使用しています。認証はモジュール (mod_auth_mellon) によって実行され、認証されたユーザーの詳細 (ユーザー名、表示名など) を含むさまざまな要求環境変数が設定されます。
mod_headers を使用して、受信リクエストからヘッダーを削除し、mod_auth_mellon によって設定されたリクエスト環境変数の値に置き換えます。
RequestHeader unset mellon_uid
RequestHeader set mellon_uid "%{mellon_uid}e" env=mellon_uid
したがって、クライアントが提供するmellon_uid
ヘッダーはすべて破棄されます。mod_auth_mellon がユーザーがログインしていると判断した場合、mellon_uid
Web アプリケーションに送信されるリクエストに新しいリクエスト ヘッダーが追加されます。
これまでのところ、mod_macro を使用してこれを管理できるようにしました。
Use Attribute uid
Use Attribute display_name
Use Attribute email
... などがあり、 は指定された属性に対して上記のAttribute
2 つのディレクティブに展開されるマクロです。RequestHeader
ただし、一部のユーザー詳細は複数の値を持つため、mod_auth_mellon は次の形式の複数のリクエスト環境変数を設定します。
mellon_foo_0 = first
mellon_foo_1 = second
mellon_foo_2 = third
mellon_foo_N = 3
属性の値の数は変化する可能性があるため、このように処理するために変数の静的リストに依存することはできません。
の使用は避けたいのですMellonMergeEnvVars
が、代わりに次のように設定されます。
mellon_foo = first;second;third
mellon_foo_N = 3
...これは、Web アプリケーションが、mellon_foo
リクエスト ヘッダーを正しく解析したり、セミコロンを含む値を処理したりする複雑な処理に対処しなければならないことを意味するためです。実際、mod_auth_mellon がエスケープ処理を実行するかどうかは私にはわかりません。エスケープ処理を実行すると、明確な解析が不可能になります (私が正しいとすれば...)
答え1
最初の値だけを見ている限りmellon_foo_N
、ここではリスクはないと思います。mod_auth_mellon は常にそれらの値を設定し、ユーザーが送信しようとする値を上書きするからです。 も常に設定されるはずですmellon_foo_N
が、念のため最初は設定を解除することもできます。