====== Validation des données entrantes ====== Les données entrant dans une application (qu'il s'agisse de celles __saisies par un utilisateur__ interactif ou celles __envoyées__ par un procédé de transmission quel qu'il soit), sont une source de préoccupation particulière en cyber sécurité. En effet, en l'absence de précautions particulières, on peut imaginer qu'un individu malveillant utilise ces entrées de données pour détourner le comportement prévu de l'application en injectant du contenu actif non envisagé par les concepteurs (injection SQL, injection de code, injection XML, etc.). De tels détournements peuvent remettre en cause la confidentialité et l'intégrité des données. Pour se prémunir de ce risque, il est nécessaire de procéder systématiquement à une étape de validation avant traitement. La validation pourra prendre 2 formes distinctes qui peuvent se cumuler : * contrôle de la **nature des données** par rapport à celles attendues (un email est-il un email valide ? une date est-elle une date valide ? etc.) ; * **normalisation des contenus** de manière à assainir les entrées (éliminer tout caractère inadapté, échapper des caractères à usage possiblement détournés, etc.) Aujourd'hui, de nombreux outils existent sur lesquels s'appuyer pour la validation : * les différents du html5 ; * les fonctions de filtrage (**filter_input** en PHP) et d'échappement (**addslashes**, **htmlspecialchars**, **htmlentities** en PHP) ; * les expressions régulières (**Regex**) accessibles dans tous les langages ; Considérant que le Client/Serveur est présent partout, pour maximiser la qualité du procédé, il faudra prévoir de réaliser une validation côté Client ET côté Serveur ! Pour ce qui est des **injections SQL**, on pourra cumuler __validation__ **et** __requêtes préparées__, sans oublier toutefois que les requêtes préparées ont un coût (supplément en temps de traitement).