Questão:
Quais são as desvantagens de implementar a autenticação HTTP em um aplicativo da web?
Anandu M Das
2014-09-15 17:57:40 UTC
view on stackexchange narkive permalink

Sei que existem diferentes tipos de mecanismos de autenticação disponíveis. Um deles é a autenticação HTTP. Qual é o perigo de usar este método em comparação com outros métodos?

Por autenticação HTTP você provavelmente quer dizer Basic AUTH? É normal usar apenas se você usar uma conexão HTTPS para transmitir suas credenciais.
Você deve esclarecer o que entende por "autenticação HTTP" (e quais outros métodos você tem em mente).
A autenticação HTTP @Bruno é definida. Existem especificações para isso. Consulte [RFC 2617] (https://www.ietf.org/rfc/rfc2617.txt).
@Xander Eu sei, mas o título da RFC 2617 não é apenas "* autenticação HTTP *", mas "* Autenticação HTTP: Autenticação de acesso básica e resumida *". Pode haver (e há) outras formas de autenticação ao usar HTTP. É por isso que pedi esclarecimentos.
Nos sites do StackExchange, esperamos que você faça pesquisas por conta própria antes de perguntar e nos mostre quais pesquisas você fez na pergunta. Neste caso, parece que você não fez nem mesmo um nível modesto de pesquisa. Por exemplo, a Wikipedia tem um [artigo] (https://en.wikipedia.org/wiki/Basic_access_authentication) sobre o assunto, que já menciona alguns perigos. Portanto, [faça mais pesquisas antes de perguntar] (http://meta.stackoverflow.com/q/261592/781723). Faça apenas perguntas que realmente o interessem; e se você se preocupa com isso o suficiente para que outras pessoas ajudem, faça um pouco de esforço sozinho primeiro.
@D.W. Pesquisei muito sobre isso, mas não consegui encontrar muitos pontos sobre as desvantagens. A maioria dos artigos simplesmente pula para outros métodos, como ID de sessão e todos.
Trzy respostas:
Xander
2014-09-15 18:40:05 UTC
view on stackexchange narkive permalink

A autenticação básica tem uma série de desvantagens, uma das quais é que o nome de usuário e a senha são passados ​​de forma clara a cada solicitação. Isso é claramente inseguro em HTTP, mas é um pouco menos vulnerável em HTTPS. No entanto, como as credenciais são enviadas com cada solicitação, ainda é pior do que qualquer outro método (incluindo resumo) que não tenha essa limitação. O principal motivo é que agora cada solicitação pode ser um alvo para roubo de credencial de texto não criptografado, não apenas uma solicitação de login inicial. Na maioria dos sistemas, após o login, o máximo que um invasor pode esperar recuperar é uma sessão ou token de autenticação. Com a autenticação básica, qualquer solicitação é uma oportunidade de roubar a senha do usuário. Isso não é ideal.

A autenticação resumida é um pouco melhor, pois envia um resumo MD5 de vários bits, incluindo o nome de usuário, a senha e um nonce (entre outros valores) e não as credenciais de texto não criptografado ... Uma senha não pode ser extraída de um resumo capturado.

Com a autenticação HTTP (em qualquer forma), você também depende do cliente para fornecer a experiência do usuário de autenticação, que pode ter seus próprios problemas e, portanto, precisa ser bem testado com os clientes que você espera que sejam usando seu aplicativo. No passado, por exemplo, eu vi navegadores específicos falharem na autenticação por causa de certos caracteres especiais em uma senha, por exemplo. Com a UX de autenticação baseada em aplicativo, você tem controle sobre isso. Com a autenticação HTTP, você não precisa.

Outro ataque (e muito pequeno) é que, se você exibir conteúdo gerado pelo usuário e hospedado externamente em seu site, estará se abrindo para ataques 401 de phishing muito sutis. Como seus usuários estão acostumados com o cromo do cliente para autenticação HTTP, eles não necessariamente perceberão se receberem um prompt de autenticação em seu site para um domínio ligeiramente diferente. Dependendo do seu aplicativo, isso pode não ser uma ameaça válida, mas certamente é algo a se considerar se você seguir a rota de autenticação HTTP.

Do ponto de vista da segurança, ter o cliente fornecendo a UX de autenticação é uma coisa boa, pois dá ao usuário uma interface consistente em todos os sites, atrapalha a experiência do usuário do site, criando atenção e também informa implicitamente ao navegador que as informações retornadas são parte de outro domínio de autenticação, portanto, o acesso do script a recursos protegidos de fora do domínio pode ser inibido.
@SimonRichter Isso geralmente é verdade, e certamente há aspectos positivos para o cliente que lida com a UX de autenticação. No entanto, neste caso específico, existem limitações significativas e essas limitações são compensações.
nobody
2014-09-15 22:00:08 UTC
view on stackexchange narkive permalink

Além dos outros pontos mencionados, outra desvantagem significativa da Autenticação Básica HTTP (versus, digamos, login baseado em formulários) é que ela não tem o conceito de "logout". Depois que o usuário insere suas credenciais, o navegador as armazena internamente para enviar com cada solicitação subsequente. Isso significa que você não pode ter um tempo limite ou botão / link "Logout" para encerrar a sessão. Se o usuário quiser evitar a possibilidade de outra pessoa usar sua sessão (por exemplo, no caso de um computador compartilhado), ele deve se lembrar de fechar o navegador.

Para mais leituras: https: / /stackoverflow.com/questions/233507/how-to-log-out-user-from-web-site-using-basic-authentication

[Você pode] (http://stackoverflow.com/a/19258791/3697633) Embora eu concorde que você deve passar por algumas peculiaridades para fazer logout.
user10008
2014-09-15 20:03:54 UTC
view on stackexchange narkive permalink

A autenticação de acesso básico por HTTPS tem vantagens claras sobre a autenticação de acesso Digest por HTTP.

Mesmo com a autenticação de acesso resumido, você pode armazenar suas senhas com hash de um sal exclusivo (domínio + nome de usuário), mas primeiro este sal pode ser adivinhado (isso torna os ataques contra usuários únicos e pequenos grupos mais fáceis) e, em segundo lugar, você não pode usar bcrypt , scrypt ou PBKDF2 para tornar a computação de hash mais difícil. Além disso, se você escolheu armazenar os hashes em um formato não recuperável (o que você deve fazer!), Você não pode alterar o reino sem exigir uma senha de usuário clara.

Em SASL , autenticação de acesso digest até foi marcada como histórica pela IETF. Para SASL, eles tinham uma alternativa ( SCRAM, claramente exigindo SASLPrep para normalização de caracteres, por exemplo) que poderiam recomendar para uso. Infelizmente, o SCRAM para HTTP nunca passou no status de rascunho (observe que, com o SCRAM, os sais do usuário também não são secretos. O invasor pode abusar do mecanismo de login para obter sais para todos os usuários que desejar).

A autenticação Digest de acesso pode dar uma falsa sensação de segurança . Se o invasor conseguir capturar um login bem-sucedido, ele pode montar um ataque de força bruta contra a senha. username , realm e nonce são todos valores conhecidos pelo invasor.

Usar HTTP não criptografado é, com ou sem Digest autenticação de acesso, não imune a MITM. O invasor pode não ser capaz de capturar a senha, mas pode capturar cookies de sessão e modificar o conteúdo ou se passar pelo usuário.

Com a autenticação de acesso resumido, a autenticação é especificada apenas para login, mas não para configuração de conta. Você tem que fazer a configuração da conta da "maneira usual". Mesmo que seu código seja inteligente e envie apenas o hash interno para evitar que a senha seja transportada em texto não criptografado, ele pode ser modificado pelo invasor para retransmiti-lo a eles. No entanto, este grave problema existe apenas uma vez, no momento do registro . Supondo que o usuário efetue login em apenas uma pequena quantidade de máquinas, você pode obter segurança semelhante usando TACK para HTTPS. Isso permite que o navegador do usuário autorize apenas o certificado obtido na primeira conexão com o site. Portanto, apenas a primeira conexão permanece exposta ao possível MITM, assim como com a autenticação de acesso digest.

Vale a pena observar explicitamente que todos os dados de autenticação (creds do usuário, resumo, cookie de sessão ou qualquer outra forma de dados de autenticação) devem ser entregues por HTTPS. Nenhum mecanismo é remotamente seguro quando entregue por HTTP em claro.
Um sistema seguro não deve depender do segredo de um sal. A função de um sal é puramente se defender contra as tabelas do arco-íris, e isso é feito em segredo ou não.
@Xander O problema com a autenticação digest é que, mesmo quando combinada com SSL, ela ainda o força a quebrar as senhas inseguras.
@ChrisMurray O sal adequado evita ataques de vários alvos em geral, não apenas as tabelas rainbow. Na maioria das situações, outros ataques de múltiplos alvos são preferíveis em vez de rainbow tables do PoV do invasor.
@CodesInChaos Sim, esse é um bom ponto que não mencionei.
Os verdadeiros sais públicos do @ChrisMurray não são um grande problema.
"* Com a autenticação de acesso digest ainda é necessário enviar a senha em texto não criptografado. Porém, apenas uma vez, no momento do registro. *" Na verdade, isso não é verdade, o servidor pode ser configurado com a parte ["HA1"] ( http://en.wikipedia.org/wiki/Digest_access_authentication) sem a necessidade de saber a senha real, nunca.
Outra desvantagem do HTTP Digest (usando HTTP simples) em comparação com Basic ou Digest sobre HTTPS é que ele não protege o resto da solicitação: um invasor MITM pode modificar a carga da solicitação e alterar seu significado. Isso pode realmente levar a uma falsa sensação de segurança.


Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...