Executando verificação de segurança...
16

Uma curiosidade sobre o bcrypt que não se fala muito

Publiquei essa história no LinkedIn hoje e achei que seria interessante trazer aqui no tabnews também.

Essa semana navegando pela internet descobri algo sobre o bcrypt que eu não sabia e solucionou uma dúvida que ficou na minha cabeça por bastante tempo.

Tudo começou há alguns meses que nossa QA estava testando uma API e criou uma conta de teste com uma senha de 255 caracteres que era o limite do banco. Funcionou perfeitamente. Mas na hora de fazer login, ela teve a brilhante ideia de digitar os 255 caracteres corretos + mais um monte de caracteres errados no final... e conseguiu logar normalmente.

Ficamos sem entender o que diabos estava acontecendo. Revisamos o código, testamos várias combinações, mas nada fazia sentido. Então limitamos os DTOs de entrada para 255 caracteres tanto no login quanto no register que era o que fazia sentido.

Mas nessa semana, estava assistindo um vídeo no YouTube sobre criptografia a peça que faltava se encaixou, em algum momento o autor do vídeo mencionou brevemente que o bcrypt tem limite de 72 caracteres.

O que me deixou espantado é que o bcrypt não retorna erro quando você passa desse limite. Simplesmente ignora tudo que vem depois do caractere 72. Ou seja, "minhasenha123" + 200 caracteres aleatórios vira só "minhasenha123" na hora do hash.

Imediatamente corrigimos nossos DTOs de validação para limitar senhas a 72 caracteres ao invés de 255 que era o padrão.

Quando contei isso para o pessoal aqui do time, ninguém conhecia essa limitação. Aparentemente é uma daquelas coisas que você só descobre quando tropeça nela e eu nunca iria ter achado esse problema se a QA não tivesse testado essa combinação absurda.

Há anos que utilizo o bcrypt e não sabia dessa limitação. Por isso estou vindo compartilhar. Você já sabia dessa?

Carregando publicação patrocinada...
1
1

QA é realmente uma arte.

Eu como desenvolvedor nunca pensaria nessa limitação, já que uma senha de 72 caracteres já é grande pra caramba, 255 nem passaria pela minha mente de ser permitido.

Mas faz todo sentido que haja esse tipo de validação.

1

kkkkk é verdade os QA tem um talento especial pra encontrar essas coisas que a gente nunca pensaria como dev.

De fato nunca tinha parado para me preocupar com isso. Até porque na prática não é um problema de segurança grave, a pessoa ainda precisa acertar os 72 caracteres da forma correta. Mas é curioso como essas descobertas surgem dos testes mais 'absurdos' que os QAs fazem!