Como posso evitar que o Apache exponha a senha de um usuário?

5

Ao usar autenticação básica (especificamente via LDAP, mas htpasswd também) com o Apache, ela torna a variável REMOTE_USER disponível para o código PHP / Ruby / Python abaixo - isso é muito útil para transferir a autenticação para o servidor da Web.

Em nosso ambiente de escritório, temos vários aplicativos internos que funcionam assim em SSL, tudo muito seguro. MAS: O Apache expõe as variáveis PHP_AUTH_USER (= REMOTE_USER) e PHP_AUTH_PW a qualquer aplicativo dentro do PHP. (PHP_AUTH_PW contém a senha de texto simples que o usuário digitou.) Isso significa que é possível que o aplicativo colete nomes de usuários e senhas. Presumivelmente, a mesma informação está disponível para Python e Ruby (todos os três estão atualmente em uso; o PHP está sendo eliminado).

Então, como posso evitar que o Apache faça isso?

Uma ideia é usar a autenticação Kerberos Negotiate (que não expõe a senha e tem o benefício de ser SSO), mas ela volta automaticamente ao Basic para alguns navegadores (Chrome e em alguns casos Firefox), fazendo com que a senha ser exposto novamente.

    
por Marius Marais 04.06.2010 / 11:53

3 respostas

2

Radius está certo - você não pode.

Após uma pesquisa mais aprofundada, percebi que este é basicamente um cenário de livro de texto para uma declaração de identidade: Um provedor de identidade confiável "prova" a identidade do usuário para o aplicativo cliente. A especificação SAML 2.0 parece ser uma boa opção.

Eu estava esperando fugir sem mais camadas de infraestrutura, mas vou com simpleSAMLphp [1] para o IDP e mod_mellon [2] para o lado do Apache. (Um dia de ajustes e funciona.) Isso não resolve o problema da senha, mas a move para onde ela pode ser controlada.

Além disso: o OpenSSO da Sun é bastante pesado, mas a Oracle o matou e o futuro do projeto OpenAM relacionado ainda não está claro.

[1]: link simpleSAMLphp

[2]: link mod_mellon

    
por 06.06.2010 / 14:01
3

Apenas no caso de alguém tropeçar nessa questão como eu fiz:

No Apache 2.4.5 e posterior, você pode usar o AuthBasicFake diretiva para mascarar a senha:

AuthBasicFake toto tata

Resultados em:

PHP_AUTH_USER=toto
PHP_AUTH_PWD=tata

Para manter o nome de usuário:

AuthBasicFake %{REMOTE_USER} tata

resulta em:

PHP_AUTH_USER=value-of-remote-user 
PHP_AUTH_PWD=tata

REMOTE_USER não é afetado.

    
por 06.01.2017 / 09:12
2

Parece impossível, mas veja link
Post # 8 sugere usar auto_prepend_file para executar um script que desconfigure a variável
É uma solução não uma solução limpa, mas existe ...

Você tentou o AuthType Digest?

    
por 04.06.2010 / 12:43