Intermédiaire 8 min de lecture 25 janvier 2025

Sanitize input : sécuriser et assainir les données utilisateur

Tout fonctionne jusqu’au jour où un apostrophe casse votre SQL, un HTML injecté s’affiche, ou un emoji perturbe votre parsing. Le sanitize input n’est pas optionnel : valider, normaliser et échapper les entrées protège vos applications. Voici ce que c’est, pourquoi c’est essentiel et comment le mettre en place efficacement.

Qu'est-ce que le sanitize input ?

C’est l’ensemble des techniques qui rendent les données d’entrée sûres pour une utilisation donnée: validation stricte, normalisation et échappement contextuel.

Voici les principales dimensions du sanitize input :

1 Nettoyage de base

Supprimer le superflu et uniformiser les chaînes avant usage.

trim(), strip_tags(), remove null bytes, htmlspecialchars()

2 Validation stricte

Accepter uniquement ce qui est attendu, rien de plus.

ctype_digit(), filter_var(), listes blanches, regex verrouillées

3 Échappement contextuel

Adapter l’échappement au contexte cible d’utilisation :

HTML: htmlspecialchars(..., ENT_QUOTES, 'UTF-8')
URL: urlencode / rawurlencode
SQL: requêtes paramétrées (PDO, prepared statements)
Shell/CLI: escapeshellarg, pas de concaténation

4 Normalisation et canonisation

Rendre les entrées cohérentes avant validation/échappement :

Unicode NFC/NFKC pour homogénéiser
Supprimer caractères de contrôle et NULL
Canoniser URL et chemins avant comparaison

Problèmes classiques

Concaténer des entrées directement dans SQL

Apostrophes, commentaires ou payloads ouvrent la porte à l’injection.

XSS via innerHTML ou attributs non échappés

Des fragments HTML/JS passent et s’exécutent côté client.

Sanitize sans validation

Nettoyer ne suffit pas si le type/format attendu n’est pas imposé.

Échappement hors contexte

Un échappement HTML n’est pas valable pour JSON, URL ou SQL.

Exemple de problème courant :

# Entrée non assainie concaténée dans une requête SQL
user = "x' OR 1=1 -- "
query = "SELECT * FROM users WHERE name = '" + user + "'"
assert isSafe(query) == true # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un simple apostrophe fait échouer des requêtes SQL
!
Des données affichées injectent du HTML/JS (XSS visible)
!
Un champ numérique accepte des valeurs hors plage ou format
!
Des entrées copiées-collées cassent l’encodage ou la comparaison
!
Des URLs non encodées brisent les routes ou déclenchent des erreurs

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII vous aide à repérer les caractères ambigus et dangereux (contrôles, espaces spéciaux), à normaliser vos entrées et à préparer un sanitize input efficace avant validation et échappement.

✅ Détection automatique

Caractères de contrôle, null bytes, espaces spéciaux, homogénéisation

📊 Analyse complète

Positions exactes, codes Unicode, recommandations de normalisation

🧹 Pré-nettoyage

Réduction de la surface d’attaque avant le traitement applicatif

💾 Export propre

Chaînes normalisées prêtes pour validation et échappement

Autres méthodes de détection

Audit dans l'éditeur

Activez les inspections "tainted input", "XSS" dans VS Code/JetBrains
Ajoutez des règles ESLint/PHPCS pour interdire innerHTML et concat SQL

En ligne de commande (Unix)

# Repérer caractères non ASCII et null bytes
grep -P "[^\x09\x0A\x0D\x20-\x7E]" fichier.txt
# Chercher séquences d'injection courantes
grep -RInE "<script|onerror=|javascript:|--|/\*|\bxp_cmdshell\b" ./
# Afficher les caractères de contrôle
cat -A fichier.txt
# Voir les codes hexadécimaux
hexdump -C fichier.txt

En code

JavaScript

const safe = DOMPurify.sanitize(input)

Python

cursor.execute("SELECT * FROM users WHERE id=%s", (user_id,))

Excel / Google Sheets

=CLEAN(TRIM(REGEXREPLACE(A1;"<[^>]+>";"")))

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant d’écrire du code, utilisez Clean ASCII pour normaliser vos entrées, supprimer les caractères à risque et faciliter votre pipeline de sanitize input :

Détection automatique
Normalisation Unicode
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Appliquez Unicode NFC/NFKC avant validation et comparaison
Forcer l’UTF-8 et supprimer le NULL byte et contrôles non utiles
Canoniser URLs/chemins (lowercase host, trailing slash, etc.)

🧹 Filtrer

Utilisez des listes blanches et types stricts (int, enum, date ISO)
Supprimez HTML indésirable (strip_tags ou DOMPurify côté client)
Bloquez caractères de contrôle hors LF/CR/HT

⚙️ Automatiser

Hooks pre-commit pour refuser concat SQL/innerHTML non sûrs
Tests de sanitation et fuzzing sur les inputs utilisateurs
Linting sécurité sur le pipeline CI (XSS/SQLi rules)

Checklist rapide

Requêtes SQL paramétrées (PDO/ORM) partout
Échappement contextuel à l’affichage (HTML/JS/URL)
Validation stricte via listes blanches et types forts
Normalisation Unicode et UTF-8 end-to-end
Rejet des caractères de contrôle et du NULL byte
Tests XSS/SQLi en CI et documentation des règles d’entrée

Conclusion

Le sanitize input est un réflexe de sécurité et de robustesse. Bien appliqué, il évite une majorité d’incidents applicatifs.

Validez, normalisez et échappez selon le contexte d’usage, et vous éliminez l’essentiel des risques XSS/SQLi et des erreurs de parsing.

Testez et assainissez vos entrées maintenant

Utilisez notre outil pour analyser, normaliser et préparer un sanitize input fiable avant intégration.

Assainir mes entrées