Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sanitização causa validação errônea quando a input possue letras #121

Open
ptsilva opened this issue Jul 25, 2021 · 2 comments
Open

Comments

@ptsilva
Copy link

ptsilva commented Jul 25, 2021

Veja um caso de duas inputs que são aplicadas a regra de validação para CNH:

$cnh_valido = '43872153406';
$cnh_invalido = 'ZZZ43872153406'

Ambos passam na validação, pois a chamada do método sanitize:

public function sanitize($value): string
    {
        return empty($value) ? "" : preg_replace('/[^\d]/', '', $value);
    }

$value = $this->sanitize($value);

O sanitize altera o valor antes da valiação, porém, como ele não altera o próprio request (e nem faz sentido), a aplicação identifica como válido um valor que na verdade é inválido.
Testei com CNH, mas com certeza deve ocorrer em todas as Rules que também utilizam o sanitize.

A correção é simples, a validação deve ser feita em cima da input bruta e não deve haver nenhuma transformação antes da validação.

@vicentimartins
Copy link
Collaborator

@ptsilva realmente, o bug existe! Já sobre a correção, não acho que a gente deve validar sobre o input bruto, pois estaremos assumindo que o usuário nunca irá enviar informação inválida no request. Acho que a melhor solução aqui é especificar a sanitização em cada caso específico. Tenho em mente uma possível solução, mas preciso de algum tempo para implementar ela. Agradeço sua contribuição!

@ptsilva
Copy link
Author

ptsilva commented Aug 19, 2021

Obrigado pelo retorno @vicentimartins, acho que podemos pensar um pouco sobre essa questão, veja esse exemplo:

$request = ['cpf' => '     258.727.290-49      '];

Meu entendimento nesse caso, é que sim, poderíamos aplicar um trim e tornar o valor válido antes da validação ... Mas observe que a lib não deveria alterar o valor 'on the fly' na validação, pois ele não iria alterar o request original...

Dessa forma, passaria na validação e a aplicação ainda sim receberia um valor inválido/duvidoso.
Ou então, como saber se realmente o valor é válido? Pra realmente saber se ele é válido após a validação usando essa estratégia, a aplicação precisaria reaplicar a transformação (trim) e então receber o valor correto.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants