Validation des données

Sommaire


Introduction:

La validation des données est un aspect essentiel de la sécurité des applications, car elle garantit que les entrées des utilisateurs sont sûres et exactes avant d’être traitées. Une validation correcte peut prévenir des attaques telles que l’injection SQL, le cross-site scripting et d’autres exploits qui pourraient potentiellement compromettre l’intégrité de votre application. Dans cet article, nous allons couvrir diverses techniques de validation des données pour sécuriser votre application.


Explications:

  • Effectuez toute la validation des données côté serveur
    La validation des données côté serveur est une exigence fondamentale pour toute application web sécurisée. Il est important de vérifier toutes les données saisies par l’utilisateur du côté serveur avant de les utiliser dans la logique de l’application. La validation côté client peut être facilement contournée et, par conséquent, la validation côté serveur est le meilleur moyen d’empêcher les données d’entrée malveillantes d’être traitées par l’application.
  • Encodez les données dans un jeu de caractères commun avant de les valider (Canonicalize)
    La validation des données doit être effectuée sur des données qui sont codées dans un jeu de caractères standard. Le processus de canonisation garantit que toutes les données d’entrée sont converties dans un format cohérent, quel que soit le type d’encodage utilisé par le client. Cela permet d’éviter les attaques qui tirent parti de différents schémas d’encodage de caractères.
  • Déterminez si le système prend en charge les jeux de caractères étendus UTF-8 et, dans l’affirmative, validez-les après le décodage UTF-8.
    Il est essentiel de valider les données après les avoir décodées d’UTF-8, surtout si l’application utilise des jeux de caractères étendus. UTF-8 est un schéma d’encodage populaire utilisé pour représenter les caractères Unicode. Le décodage de données codées en UTF-8 peut révéler des séquences d’octets invalides ou des représentations de caractères inattendues, ce qui peut entraîner des failles de sécurité.
  • Validez toutes les données fournies par le client avant de les traiter, y compris tous les champs de formulaire, les URL et les valeurs d’en-tête HTTP.
    Toutes les données d’entrée doivent être validées avant le traitement, y compris les données soumises par le biais de formulaires, d’URL et d’en-têtes HTTP. Il est important de valider les données avant leur traitement pour s’assurer que seules les entrées valides sont acceptées.
  • Identifiez les limites de confiance du système et validez toutes les données provenant de connexions externes (par exemple, bases de données, flux de fichiers, etc.).
    Il est important d’identifier les limites de confiance dans votre application et de valider toutes les données reçues de sources externes. Ces sources peuvent inclure des bases de données, des flux de fichiers et d’autres connexions externes. La validation des données reçues de ces sources permet d’éviter les attaques par injection.
  • Valider toutes les entrées par rapport à une liste « blanche » de caractères autorisés
    La validation des données doit toujours comporter une liste blanche de caractères autorisés, qui représente un ensemble d’entrées attendues. Toute donnée qui ne correspond pas à cette liste blanche est considérée comme non valide et doit être rejetée. C’est ce qu’on appelle la validation positive, et c’est une bonne pratique pour sécuriser les applications web.
  • Nettoyer tous les caractères potentiellement dangereux qui doivent être autorisés, comme : <, >, « , ‘, %, (, ), &, +, , ‘, « 
    Certains caractères sont autorisés dans les données d’entrée mais peuvent être utilisés de manière malveillante. Ces caractères, y compris ‘<‘, ‘>’, ‘&’, et d’autres, doivent être nettoyés pour empêcher leur utilisation malveillante.
  • Valider les types de données attendus
    Il est important de valider les données d’entrée pour les types de données attendus, notamment les nombres, les dates et les heures. La validation garantit que les données d’entrée sont conformes aux formats attendus et réduit la probabilité d’erreurs dans la logique de l’application.
  • Validation de la plage de données
    La validation des données doit inclure la validation des plages pour garantir que les données d’entrée se situent dans une plage attendue. La validation de la plage permet d’éviter la soumission de données non valides qui peuvent entraîner des erreurs d’application.
  • Validation de la longueur des données
    La validation des données doit inclure la validation de la longueur pour s’assurer que les données d’entrée ne dépassent pas les longueurs maximales. La validation de la longueur est importante pour éviter les débordements de mémoire tampon et d’autres erreurs d’application.
  • Utilisez une routine de validation principale pour coder l’entité HTML de toutes les sorties vers le client. Si cela n’est pas possible, codez au moins tout le contenu dynamique qui provient de l’extérieur de la frontière de confiance de l’application.
    L’utilisation d’une routine de validation principale peut aider l’entité HTML à coder toutes les sorties vers le client, garantissant que toutes les données qui passent par l’application sont sûres. Cependant, si cela n’est pas possible, au moins tout le contenu dynamique provenant de l’extérieur de la frontière de confiance de l’application doit être codé pour empêcher l’exécution de scripts ou de contenus malveillants dans le navigateur du client. Cela est particulièrement important pour le contenu généré par l’utilisateur, comme les commentaires ou les messages, qui peuvent contenir des entrées potentiellement dangereuses.
  • Si votre routine de validation standard ne peut pas traiter les entrées suivantes, alors elles doivent être vérifiées de manière discrète :
    ▪ Vérifier les octets nuls ().
    ▪ Vérification des caractères de nouvelle ligne (, , \r, \n).
    ▪ Vérifier les caractères d’altération du chemin (../ ou ..).
  • Dans les cas où l’encodage du jeu de caractères étendu UTF-8 est pris en charge, tenez compte des représentations alternatives telles que [PERCENT]c0[PERCENT]ae[PERCENT]c0[PERCENT]ae/. Utilisez la canonisation pour traiter le double encodage ou d’autres formes d’attaques par obfuscation.
  • Il est important de vérifier ces entrées séparément car elles peuvent être utilisées pour contourner les routines de validation standard. Les octets nuls peuvent être utilisés pour terminer une chaîne de caractères, les caractères de nouvelle ligne peuvent être utilisés pour injecter des commandes supplémentaires et les caractères d’altération du chemin peuvent être utilisés pour accéder à des fichiers ou des répertoires restreints. La prise en compte des représentations alternatives à l’aide de la canonisation permet de prévenir les attaques qui utilisent plusieurs schémas d’encodage pour obscurcir les données d’entrée.

Exemple:

Voici un exemple de code qui illustre la validation des données dans un formulaire d’inscription :

// Get user input from form
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$email = $_POST['email'];
$password = $_POST['password'];

// Validate user input
if (empty($first_name) || empty($last_name) || empty($email) || empty($password)) {
  // Error: All fields are required
  $error_message = 'Please fill out all fields.';
} elseif (strlen($password) < 12) {
  // Error: Password must be at least 12 characters long
  $error_message = 'Password must be at least 12 characters long.';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  // Error: Email address is invalid
  $error_message = 'Please enter a valid email address.';
} else {
  // Input is valid, proceed with registration
  // ...
}

Dans cet exemple, un formulaire d’inscription recueille le prénom, le nom, l’adresse électronique et le mot de passe de l’utilisateur. Le code valide ensuite la saisie en vérifiant si tous les champs sont remplis, si le mot de passe comporte au moins 12 caractères et si l’adresse électronique est valide en utilisant la fonction « filter_var » de PHP avec le filtre « FILTER_VALIDATE_EMAIL« .

Si l’un des contrôles de validation échoue, un message d’erreur est affiché à l’utilisateur. Sinon, l’entrée est considérée comme valide et le processus d’enregistrement peut se poursuivre.

Cet exemple montre l’importance de la validation des données saisies par l’utilisateur pour s’assurer qu’elles sont au bon format et répondent à certains critères. Sans une validation adéquate, les utilisateurs peuvent potentiellement saisir des données non valides ou malveillantes qui pourraient compromettre la sécurité et l’intégrité de l’application.


Conclusion:

En conclusion, la validation des données est un aspect essentiel de la sécurité des applications. Une validation correcte permet d’éviter les attaques telles que l’injection SQL, le cross-site scripting et d’autres exploits qui pourraient potentiellement compromettre l’intégrité de votre application.

En suivant les meilleures pratiques telles que la validation côté serveur, l’utilisation de listes blanches, la validation des types et des plages de données d’entrée et la prise en compte des représentations alternatives, vous pouvez contribuer à garantir que votre application est sécurisée et à l’abri des attaques malveillantes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *