par
Ryle » 19 oct. 2007, 10:51
Euh.... quand on parle sécurité, on parle protéger des éléments sensibles... on est pas obligé de tout surveiller, tout contrôller non plus... si l'utilisateur bricole et qu'il est le seul pénalisé, on est pas obligé de se prendre la tête
Si un utilisateur force la saisi d'un nom de pays qui n'est pas dans ta base au lieu d'utiliser le select que tu proposes, ta requête ne ramenera pas de résultat, point. Pas la peine de faire 36 tests pour vérifier s'il existe, s'il peut l'utiliser, ce n'est pas une donnée sensible et au mieux il se pénalise lui même, c'est tout
Après, que la donnée soit passée en post ou get à mon avis ne change rien (c'est juste une question de taille et de soumission automatique ou non en cas de refresh, bref de confort)
En gros, les principales choses que tu devrais contrôler sont (à mon sens)
- que les variables que tu utilises dans tes requêtes sont bien protégées contre les injections (c'est à dire que si l'utilisateur saisi des apostrophes ou guillemets, celles-ci seront protégées d'un antislash pour éviter que le parseur SQL ne l'interprète comme une fin de chaine et n'exécute le reste de la chaine comme du code sql, chose que la fonction mysql_real_escape_string() fait à merveil)
- que si les données que tu récupères de l'utilisateur sont enregistrées en base et ensuite affichée sur ton site, il n'y a pas de code html, ou alors uniquement des balises choisies (voir htmlentities() ou strip_tags())
- que si la donnée permet l'ouverture d'un fichier par inclusion, tu dois t'assurer que l'utilisateur ne pourra inclure d'autre fichiers que ceux que toi tu as prévu (avec une white list, ou en forçant un répertoire, ou autre).
...
Euh.... quand on parle sécurité, on parle protéger des éléments sensibles... on est pas obligé de tout surveiller, tout contrôller non plus... si l'utilisateur bricole et qu'il est le seul pénalisé, on est pas obligé de se prendre la tête :)
Si un utilisateur force la saisi d'un nom de pays qui n'est pas dans ta base au lieu d'utiliser le select que tu proposes, ta requête ne ramenera pas de résultat, point. Pas la peine de faire 36 tests pour vérifier s'il existe, s'il peut l'utiliser, ce n'est pas une donnée sensible et au mieux il se pénalise lui même, c'est tout :)
Après, que la donnée soit passée en post ou get à mon avis ne change rien (c'est juste une question de taille et de soumission automatique ou non en cas de refresh, bref de confort)
En gros, les principales choses que tu devrais contrôler sont (à mon sens)
- que les variables que tu utilises dans tes requêtes sont bien protégées contre les injections (c'est à dire que si l'utilisateur saisi des apostrophes ou guillemets, celles-ci seront protégées d'un antislash pour éviter que le parseur SQL ne l'interprète comme une fin de chaine et n'exécute le reste de la chaine comme du code sql, chose que la fonction mysql_real_escape_string() fait à merveil)
- que si les données que tu récupères de l'utilisateur sont enregistrées en base et ensuite affichée sur ton site, il n'y a pas de code html, ou alors uniquement des balises choisies (voir htmlentities() ou strip_tags())
- que si la donnée permet l'ouverture d'un fichier par inclusion, tu dois t'assurer que l'utilisateur ne pourra inclure d'autre fichiers que ceux que toi tu as prévu (avec une white list, ou en forçant un répertoire, ou autre).
...