Política de senha

· Padrão Frontend
Juan Kalleo
Juan Kalleo
Senior Fullstack
This page hasn't been translated to English yet — showing the original Portuguese content.

Regras que definem o que conta como senha aceitável — tamanho mínimo/ máximo, composição de caracteres, e se a senha é checada contra listas de senha vazada. O OWASP Authentication Cheat Sheet recomenda: mínimo 8 caracteres com MFA (15 sem MFA), máximo de pelo menos 64 caracteres, aceitar qualquer caractere (sem regra de "1 maiúscula + 1 número + 1 símbolo"), e não truncar senha maior que o limite em silêncio.

No padrão frontend

O front já limita corretamenteMAX_PASSWORD_LENGTH = 128 (lib/ form-limits.ts) e min(6, ...) nos schemas Zod de alterar-senha e primeiro-acesso (ver Formulários).

A API também aplica, sem depender do módulo :validatable inteiro do Devise (que traria validação de e-mail junto, fora do escopo deste ponto). User valida só o que falta:

# api/app/models/user.rb
validates :password, presence: true, on: :create
validates :password, length: { within: Devise.password_length }, allow_blank: true

Devise.password_length é a mesma configuração global (config.password_length = 6..128, api/config/initializers/devise.rb) que lib/form-limits.ts já espelhava no front — agora os dois lados leem o mesmo teto real, um lido direto da config do Devise, o outro copiado como constante documentada. allow_blank: true preserva o comportamento correto de edição (senha em branco = "não trocar" — o setter do Devise já só grava encrypted_password quando o valor vem preenchido); presence: true, on: :create fecha o caso que não tinha proteção nenhuma: criar um usuário sem senha não é mais possível, nem por fora do front.

Nenhuma regra de composição (maiúscula/número/símbolo obrigatório) existe em lugar nenhum, front ou back — e não deveria: o OWASP recomenda exatamente essa ausência (é a prática atual, substituindo a exigência antiga de "1 maiúscula + 1 número"). Tamanho é a única regra que realmente importa aqui, e agora está nos dois lados.