|
Comment prémunir votre site de commerce électronique contre les attaques par injection de code SQL
* Valider systématiquement les entrées de vos utilisateurs
* Les validateurs que vous ajoutez à votre site doivent tenir compte des
différents scénarios d’utilisation.
* Prévoyez comment votre site se comportera s’il est utilisé d’une façon
anormale, par exemple :
>>> Comment il se comportera si un utilisateur entre un lien vers un fichier MPEG
de 50 Mo dans un champ qui devrait normalement recevoir un code postal ?
>>> Comment votre site se comportera si une instruction DROP TABLE est intégrée
dans un champ de texte ?
* Ne jamais créer vos instructions SQL à partir des données renseignées par les
utilisateurs.
* Privilégier l’utilisation des procédures stockées pour valider les données
saisies par les utilisateurs.
* Fixez toujours une taille maximale pour délimiter la quantité de données que
chaque champ peut recevoir. Cela vous permettra d’éviter les débordements
délibérés de
la mémoire tampon.
* Rejetez les entrées contenant des données binaires, les caractères
d'échappement et les caractères de commentaire.
* Pour les documents XML, assurez-vous que toutes les données sont valides eu
égard au schéma du document.
* Validez toujours les entrées utilisateur en vérifiant leur type, leur longueur
et leur format (rappelez-vous que l'informatique est la science des
limitations).
* Implémentez plusieurs niveaux de validation sans pour autant compromettre la
fluidité et l’utilisabilité de votre site. Une pratique prudente consiste à
valider les entrées au niveau du client au moyen d’un langage de script (Vbscript,
Javascript) puis au niveau du serveur.
* Ne concaténez jamais une entrée utilisateur qui n'est pas validée. (Nous
rappelons que la concaténation des chaînes est le principal point d'entrée des
attaques par injection de code).
* N'acceptez pas les chaînes suivantes dans les champs à partir desquels les
noms de fichiers peuvent être construits : AUX, CLOCK$, COM1 à COM8, CON, CONFIG$,
LPT1 à LPT8, NUL et PRN.
*Dans toute la mesure du possible,
rejetez les entrées qui contiennent les caractères suivants (surtout sous SQL
Server. Pour les autres SGBDR il faut consulter la documentation technique):
| Caractère |
Signification dans T-SQL |
;
'
--
/* ... */
xp_ |
Délimiteur de requête
Délimiteur de chaîne de données de caractères
Délimiteur de commentaire
Délimiteurs de commentaire. Le serveur n'évalue pas le texte qui figure
entre les caractères /* et */.
Figure au début du nom des procédures stockées étendues de catalogue,
telles que xp_cmdshell. |
|