Vidéo: Comment éviter les problèmes de cache des fichiers JavaScript pendant votre développement 2024
La première règle d'éviter l'injection de code dans les programmes C ++ n'est jamais, jamais, permettre à l'entrée de l'utilisateur d'être traitée par un interpréteur de langage à usage général. Une erreur courante avec l'injection SQL est que le programme accepte l'entrée de l'utilisateur comme si elle était toujours acceptable et l'insère dans une requête SQL qu'elle expédie ensuite au moteur de base de données pour traitement.
A titre d'exemple, un programme demandant une entrée utilisateur sur une date peut être piraté. L'approche la plus sûre et la plus conviviale serait de fournir à l'utilisateur un graphique du calendrier à partir duquel il pourrait sélectionner les dates de début et de fin. Le programme créerait alors une date basée sur ce que l'utilisateur a cliqué.
Si cela n'est pas possible, le programme devrait vérifier soigneusement l'entrée pour s'assurer que l'entrée était dans le bon format pour une date, dans ce cas aaaa / mm / jj < - en d'autres termes, quatre chiffres suivis d'une barre oblique suivie de deux chiffres et d'une barre oblique et enfin de deux chiffres supplémentaires. Rien d'autre ne devrait être considéré comme une contribution acceptable. Parfois, vous ne pouvez pas être aussi précis sur le format. Si vous devez autoriser l'utilisateur à entrer du texte flexible, vous pouvez au moins éviter les caractères spéciaux. Par exemple, il est pratiquement impossible d'effectuer une injection de code SQL sans utiliser de guillemets simples ou doubles.
// vérifier une chaîne 's' pour s'assurer que c'est bien ASCII size_type off = s. find_first_not_of ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_"); if (off! = chaîne:: npos) {cerr << "errorn";}
Ce code recherche dans la chaîne
s un caractère qui n'est pas l'un des caractères A à Z, a à z, De 0 à 9 ou de soulignement. S'il trouve un tel caractère, le programme rejette l'entrée.