Méthodes de nettoyage des entrées
Concepts fondamentaux du nettoyage des entrées
Le nettoyage des entrées est une technique de sécurité essentielle pour empêcher les entrées malveillantes de compromettre l'intégrité et le fonctionnement du système.
Techniques de nettoyage principales
1. Filtrage de caractères
void sanitize_input(char *input) {
for (int i = 0; input[i] != '\0'; i++) {
if (!isalnum(input[i]) && input[i] != ' ') {
input[i] = '_'; // Remplacer les caractères non valides
}
}
}
2. Validation par liste blanche
int is_valid_input(const char *input) {
const char *allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";
return strspn(input, allowed) == strlen(input);
}
Stratégies de nettoyage
Stratégie |
Description |
Cas d'utilisation |
Filtrage de caractères |
Supprimer/Remplacer les caractères non valides |
Validation d'entrée utilisateur |
Limitation de longueur |
Tronquer l'entrée à la longueur maximale |
Prévenir les dépassements de tampon |
Conversion de type |
Convertir l'entrée au type attendu |
Validation d'entrée numérique |
Échappement des caractères spéciaux |
Neutraliser les risques d'injection potentiels |
Requêtes SQL, commandes shell |
Flux de traitement des entrées
flowchart TD
A[Entrée brute de l'utilisateur] --> B{Valider la longueur}
B -->|Trop longue| C[Tronquer]
B -->|Longueur valide| D{Filtrer les caractères}
D --> E{Vérifier la liste blanche}
E -->|Valide| F[Traitement sécurisé]
E -->|Non valide| G[Refuser l'entrée]
Techniques de nettoyage avancées
Validation par expression régulière
int validate_email(const char *email) {
regex_t regex;
int reti = regcomp(®ex, "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", REG_EXTENDED);
reti = regexec(®ex, email, 0, NULL, 0);
regfree(®ex);
return reti == 0;
}
Nettoyage des entrées numériques
int sanitize_numeric_input(const char *input, int *result) {
char *endptr;
long value = strtol(input, &endptr, 10);
if (endptr == input || *endptr != '\0') {
return 0; // Entrée non valide
}
*result = (int)value;
return 1;
}
Considérations de sécurité
- Ne faites jamais confiance aux entrées utilisateur.
- Validez et nettoyez toujours les entrées.
- Utilisez plusieurs couches de validation.
- Implémentez un nettoyage spécifique au contexte.
- Minimiser la surcharge de traitement.
- Utiliser des algorithmes de validation efficaces.
- Implémenter le rejet précoce des entrées non valides.
LabEx souligne le rôle crucial du nettoyage complet des entrées pour développer des applications C sécurisées et robustes.