我可以配置 Apache httpd 来删除/替换所有符合模式的请求标头吗?

我可以配置 Apache httpd 来删除/替换所有符合模式的请求标头吗?

我在 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两个指令。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,但您始终可以先取消设置以确保万无一失。

相关内容