Skip to main content

user-input-not-validated

Faible

Description

Les champs de saisie acceptent des données qui violent le type, le format ou la longueur attendus — tels que des lettres dans un champ numérique, des chaînes non-email dans un champ email, ou des chaînes extrêmement longues dans un champ de texte sans limite de longueur.

Importance

L’absence de validation des entrées peut causer :
  • Des erreurs d’application lorsque des données invalides atteignent le traitement en aval
  • Des violations de contraintes de base de données
  • Un comportement inattendu dans la logique métier
  • Dans certains cas, des problèmes de performance dus à des entrées extrêmement longues
Bien que moins sévère que les vulnérabilités d’injection, les entrées invalides peuvent déclencher un comportement inattendu du serveur qui facilite une exploitation ultérieure.

Comment QAOS le détecte

L’agent identifie les champs de formulaire et soumet des charges utiles à type incompatible, à valeur limite et à caractères spéciaux, observant si l’application les accepte ou les rejette :
  • Champs numériques : soumission de lettres et de caractères spéciaux
  • Champs email : soumission de chaînes sans @
  • Champs texte : soumission de chaînes extrêmement longues (10 000+ caractères)
  • Champs bornés : soumission de valeurs aux limites déclarées et au-delà

Exemples

Champ âge : "vingt-cinq"        ← lettres dans un champ numérique
Champ email : "passunemail"     ← symbole @ manquant
Champ téléphone : "+1 DROP TABLE"    ← caractères spéciaux
Champ commentaire : "A" * 50000      ← chaîne extrêmement longue

Comment corriger

Validez toutes les entrées à la fois côté client (pour un retour immédiat à l’utilisateur) et côté serveur (pour la sécurité). La validation côté client seule n’est jamais suffisante.
// Validation HTML5 intégrée
<input type="number" min="0" max="150" required>
<input type="email" required>
<input type="text" maxlength="500">

// Validation côté serveur avec Zod (TypeScript)
const schema = z.object({
  age: z.number().int().min(0).max(150),
  email: z.string().email(),
  comment: z.string().max(500)
})

// Python avec Pydantic
class UserInput(BaseModel):
    age: int = Field(ge=0, le=150)
    email: EmailStr
    comment: str = Field(max_length=500)
Retournez des messages d’erreur clairs et spécifiques lorsque la validation échoue afin que les utilisateurs sachent quoi corriger.