Estou usando o Apache httpd como proxy reverso na frente de um aplicativo da web. A autenticação é realizada por um módulo (mod_auth_mellon), que define diversas variáveis de ambiente de solicitação com detalhes sobre o usuário autenticado (nome de usuário, nome de exibição e assim por diante).
Eu uso mod_headers para remover cabeçalhos da solicitação recebida e substituí-los pelo valor das variáveis de ambiente da solicitação que foram definidas por mod_auth_mellon.
RequestHeader unset mellon_uid
RequestHeader set mellon_uid "%{mellon_uid}e" env=mellon_uid
Assim, qualquer cabeçalho fornecido pelo cliente mellon_uid
é descartado. Se mod_auth_mellon considerar que o usuário está logado, um novo mellon_uid
cabeçalho de solicitação será adicionado à solicitação que será enviada posteriormente para o aplicativo da web.
Até agora, tornei isso gerenciável usando mod_macro:
Use Attribute uid
Use Attribute display_name
Use Attribute email
... e assim por diante, onde Attribute
está uma macro que se expande para as duas RequestHeader
diretivas acima para o atributo fornecido.
No entanto, alguns detalhes do usuário têm valores múltiplos, para os quais mod_auth_mellon define múltiplas variáveis de ambiente de solicitação no formato:
mellon_foo_0 = first
mellon_foo_1 = second
mellon_foo_2 = third
mellon_foo_N = 3
Como o número de valores de um atributo pode variar, não posso confiar em uma lista estática de variáveis para processar dessa forma.
Eu gostaria de evitar o uso de MellonMergeEnvVars
, que definiria o seguinte:
mellon_foo = first;second;third
mellon_foo_N = 3
... porque isso significa que o aplicativo da web agora precisa lidar com a complexidade de analisar corretamente o mellon_foo
cabeçalho da solicitação, lidar com valores que contêm ponto e vírgula, etc. Na verdade, não está claro para mim se mod_auth_mellon executa qualquer escape, o que torna a análise inequívoca impossível (se eu estiver certo...)
Responder1
Eu acho que contanto que você olhe apenas para os primeiros mellon_foo_N
valores, não deve haver nenhum risco aqui, porque mod_auth_mellon sempre definirá esses valores sozinho, substituindo quaisquer valores que o usuário possa tentar enviar. Ele também deve sempre ser definido mellon_foo_N
, mas você sempre pode desmarcá-lo inicialmente para ter certeza.