Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se
0
respostas

Senha aparece em claro no Log ao realizar login

Estou usando o vRaptor 4.2.2

Tenho um método de validação de usuário e senha:

@Post
public void valida(@NotNull @Valid Login login) {
    // lógica de validação aqui
}

O login.jsp é assim:

<form action="<c:url value='/login/valida'/>" method="post">
    <div class="centraliza">
        <div class="form-group col-sm-4 centraliza">
            <label for="login.usuario">Usuário</label>
            <input type="text" class="form-control" name="login.usuario" id="login.usuario"
                value="${login.usuario}" />
        </div>
        <br/>
        <div class="form-group col-sm-4 centraliza">
            <label for="login.senha">Senha</label>
            <input type="password" class="form-control" name="login.senha" id="login.senha"
                value="${login.senha}" />
        </div>
        <br/>
        <div class="centraliza-texto">
            <input type="submit" value="Entrar" class="btn btn-info btn-lg" />
        </div>
    </div>
</form>

Antes de chegar na primeira linha da lógida de validação do método 'valida', passo pelo trecho de código da classe IogiParametersProvider.java:

private List<Object> instantiateParameters(Parameters parameters, List<Target<Object>> targets, List<Message> errors) {
        LOGGER.debug("getParametersFor() called with parameters {} and targets {}.", parameters, targets);

        List<Object> arguments = new ArrayList<>(targets.size());
        for (Target<Object> target : targets) {
            Object newObject = instantiateOrAddError(parameters, errors, target);
            arguments.add(newObject);
        }
        return arguments;
    }

Essa linha "LOGGER.debug("getParametersFor() called with parameters {} and targets {}.", parameters, targets);" loga meu usuário e senha em claro nos logs. De cara, pensei em aumentar o nível do log4j de DEBUG para INFO, e parou de logar. Porém é uma solução sensível de erro de alguém que troque esse nível.

Vi que, em ParametersInstantiator.java, tem o trecho abaixo:

private Object[] getParametersForCurrentMethod() {
        Object[] args = flash.consumeParameters(methodInfo.getControllerMethod());
        if (args == null) {
            return provider.getParametersFor(methodInfo.getControllerMethod(), errors);
        }
        return args;
    }

Ele entra na condicão "if (args == null)". Não sei por quê args ainda é null nesse ponto (talvez seja o esperado mesmo). É exatamente o que faz cair na linha supracitada: "LOGGER.debug("getParametersFor() called with parameters {} and targets {}.", parameters, targets);"

Alguém poderia me ajudar a não deixar essa senha em claro no log mantendo no nível de log DEBUG?

Obrigado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software