Validators

Validatori Sicurezza

Validatori per credenziali utente - username, password con requisiti minimi, password forte e policy configurabili.

Panoramica

I validatori sicurezza gestiscono la verifica di credenziali utente: formato username e requisiti di complessità delle password. Sono progettati per guidare l'utente verso pratiche sicure durante la registrazione o il cambio password.

A differenza di molti validatori, questi restituiscono errori multipli quando più requisiti falliscono contemporaneamente, permettendo di visualizzare all'utente tutti i problemi in una sola volta.

Validatori

username

Sintassi: username
Descrizione: Verifica che il nome utente rispetti le regole standard. Controlla lunghezza, carattere iniziale, caratteri ammessi e assenza di caratteri speciali consecutivi.

Requisiti:

  • Lunghezza: 3-30 caratteri
  • Deve iniziare con una lettera (a-z, A-Z)
  • Caratteri permessi: lettere, numeri, underscore (_), punto (.), trattino (-)
  • Non può avere caratteri speciali consecutivi (es. __, .., --, ._)

Esempi:

// Valido
ValidationService.validate('mario_rossi', 'username')
ValidationService.validate('user123', 'username')
ValidationService.validate('john.doe', 'username')
ValidationService.validate('admin-2024', 'username')

// Non valido
ValidationService.validate('123user', 'username')     // non inizia con lettera
ValidationService.validate('ab', 'username')          // troppo corto (< 3)
ValidationService.validate('user__name', 'username')  // consecutivi (__)
ValidationService.validate('user..name', 'username')  // consecutivi (..)
ValidationService.validate('user@name', 'username')   // carattere @ non ammesso
// (max 30 caratteri)

// In schema DynamicFormLayouts
{ name: 'username', type: 'text', validation: 'required|username' }

password

Sintassi: password
Descrizione: Verifica che la password rispetti i requisiti minimi di sicurezza. Restituisce tutti gli errori simultaneamente.

Requisiti:

  • Almeno 8 caratteri
  • Almeno una lettera maiuscola (A-Z)
  • Almeno una lettera minuscola (a-z)
  • Almeno un numero (0-9)
  • Almeno un carattere speciale (!@#$%^&*(),.?":{}|<>)

Esempi:

// Valido
ValidationService.validate('Password123!', 'password')
ValidationService.validate('MySecure#Pass1', 'password')

// Non valido - errori multipli
ValidationService.validate('password', 'password')   // manca: maiuscola, numero, speciale
ValidationService.validate('Password', 'password')   // manca: numero, speciale
ValidationService.validate('Pass123', 'password')    // troppo corta + manca speciale
ValidationService.validate('PASS123!', 'password')   // manca minuscola

// In schema DynamicFormLayouts
{ name: 'password', type: 'password', validation: 'required|password' }

strong

Sintassi: strong
Descrizione: Verifica che la password rispetti requisiti di sicurezza elevati. Include tutti i requisiti di password con soglie più alte e vincoli aggiuntivi.

Requisiti:

  • Almeno 12 caratteri
  • Almeno una lettera minuscola (a-z)
  • Almeno una lettera maiuscola (A-Z)
  • Almeno un numero (0-9)
  • Almeno un carattere speciale (!@#$%^&*(),.?":{}|<>)
  • Nessuno spazio
  • Nessun carattere ripetuto 3+ volte consecutive (es. aaa, 111)

Esempi:

// Valido
ValidationService.validate('SuperSecure123!@#', 'strong')
ValidationService.validate('MyP@ssw0rdIsStr0ng', 'strong')

// Non valido
ValidationService.validate('Short1!', 'strong')          // troppo corta (< 12)
ValidationService.validate('Password 123!', 'strong')    // contiene spazio
ValidationService.validate('Passsword123!', 'strong')    // "sss" ripetuto 3 volte
ValidationService.validate('Password123', 'strong')      // manca carattere speciale

// In schema DynamicFormLayouts
{ name: 'nuovapassword', type: 'password', validation: 'required|strong' }

passwordpolicy

Sintassi: passwordpolicy oppure passwordpolicy:livello
Descrizione: Verifica la password secondo una policy configurabile. Permette di scegliere il livello di sicurezza richiesto in base al contesto applicativo.
Parametro: (opzionale) basic, medium (default), strong

Policy basic (minLength: 8)

Requisiti:

  • Almeno una lettera minuscola
  • Almeno una lettera maiuscola
  • Almeno un numero
ValidationService.validate('Password1', 'passwordpolicy:basic')     // valido
ValidationService.validate('password1', 'passwordpolicy:basic')     // non valido (manca maiuscola)
ValidationService.validate('PASSWORD1', 'passwordpolicy:basic')     // non valido (manca minuscola)

Policy medium (minLength: 10) — default

Requisiti basic +

  • Almeno un carattere speciale (!@#$%^&*)
  • Nessun carattere ripetuto 3+ volte consecutive
ValidationService.validate('Password1!', 'passwordpolicy')          // valido (medium è default)
ValidationService.validate('Password1!@', 'passwordpolicy:medium')  // valido
ValidationService.validate('Password111!', 'passwordpolicy:medium') // non valido (111 ripetuto)

Policy strong (minLength: 12)

Requisiti medium +

  • Nessuna sequenza comune: 123, abc, qwerty, password
ValidationService.validate('MySecurePass1!@', 'passwordpolicy:strong')   // valido
ValidationService.validate('Password123!@#', 'passwordpolicy:strong')    // non valido (sequenza "123")
ValidationService.validate('MyQwerty12345!', 'passwordpolicy:strong')    // non valido ("qwerty")

Esempi completi:

// Registrazione con policy configurabile tramite variabile
const policyLevel = 'medium'
ValidationService.validate('MyPass1!@#', `passwordpolicy:${policyLevel}`)

// In schema DynamicFormLayouts
{ name: 'password', type: 'password', validation: 'required|passwordpolicy:strong' }

Confronto policy

PolicyMin. lunghezzaMaiuscolaMinuscolaNumeroSpecialeNo ripetizioniNo sequenze comuni
basic8---
medium10-
strong12
password8--
strong (validatore)12-