我使用Apache作为web应用程序前面的反向代理。身份验证由一个模块(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认为用户已登录,则向发送到web应用程序的请求中添加一个新的mellon_uid请求头。
到目前为止,我已经通过使用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是否执行任何转义,这使得不可能进行明确的解析(如果我是对的.)
发布于 2020-07-31 13:53:23
我认为,只要您只看第一个mellon_foo_N值,这里就不应该有任何风险,因为mod_auth_mellon总是会自行设置这些值,覆盖用户可能试图发送的任何值。它也应该总是设置mellon_foo_N,但是您可以在一开始就取消它以确定。
https://serverfault.com/questions/1000154
复制相似问题