Solução
Quando se fala de segurança é muito importante lembrar que, no fim das contas, estamos tentando proteger pessoas. Por isso, nossa aplicação não deve aumentar os riscos de segurança que os seus usuários estão correndo.
A falha de segurança está na regra 1 dos endpoints, que diz:
- Todo parâmetro DEVE ser passado como query parameter. O input do usuário não deve ser lido de nenhum outro lugar;
É importante levar em consideração que nenhum software/desenvolvedor considera a URL de um site como um dado sensível, e que os query parameters fazem parte da URL de um site. Com isso em mente, nota-se que existe um risco dos dados sensíveis (como uma senha) serem negligenciados.
E isso realmente acontece. Ao enviar um dado sensível usando query parameters, esse dado será armazenado em texto plano no mínimo em dois lugares:
- No histórico de navegação do navegador do usuário;
- Nos logs de acesso do servidor (nesse caso, nos logs do nginx).
Ou seja, a senha do usuário que tanto devemos proteger acaba sendo armazenada de maneira desprotegida.