> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qaos.machdel.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Validation des entrées

> Critères où les champs de saisie acceptent des données qui violent les contraintes de type, de format ou de longueur attendues.

***

## user-input-not-validated

<Badge>Faible</Badge>

**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 critères 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.

```javascript theme={null}
// 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.
