Instructeur: Comme vous l'avez
vu jusqu'à présent, les injections de SQL sont très dangereuses.
En outre, ils sont très faciles à (marmonnements) et très faciles à trouver.
Vous les trouverez partout sur des sites Web très célèbres.
Les gens essaient d'empêcher ces vulnérabilités en utilisant des filtres.
Les filtres peuvent donner l’impression qu’il n’ya pas d’explosivité,
mais si vous essayez vraiment plus durement en utilisant des
encodages, différents types d’encodage ou un proxy, vous pourrez
alors contourner la plupart de ces filtres.
Certains programmeurs utilisent une liste noire.
Par exemple, ils empêchent l’utilisation de l’union, ils empêchent
l’utilisation d’insert et autres choses du même genre.
Encore une fois, ce n'est pas sécurisé à 100%.
Il peut être contourné.
Utiliser une liste blanche?
Exactement les mêmes problèmes que la liste noire.
La meilleure façon de le faire est de programmer votre
application Web de manière à ne pas permettre au code d'y être injecté
puis exécuté.
La meilleure façon de procéder consiste à utiliser une instruction paramétrée
dans laquelle les données et le code sont séparés.
La meilleure façon de vous montrer ce que je veux
dire par là, c’est utiliser un exemple.
Je garde le moins de programmation dans cet exemple.
Je ne veux pas que ce soit un exemple de programmation.
Il y a en fait des erreurs dans la programmation,
mais j'essaie de vous expliquer davantage le concept
que la manière de le programmer.
Le code vulnérable sur lequel nous nous penchions le faisait auparavant.
Auparavant, il sélectionnait * parmi les comptes dont le nom d'utilisateur est égal à
ce que nous avons mis dans textbox1.
Ensuite, nous avions l'habitude de mettre
textbox1, disons
simplement ceci, nous utilisions l'habitude de dire admin,
puis fermons la citation.
Ensuite, nous pouvons faire une sélection de syndicat et
exécuter autre chose.
Ensuite, une fois que nous avons terminé, nous ajoutions le commentaire
qui, fondamentalement, ignore tout ce qui vient après.
Ainsi, lorsque vous copiez ceci et
que vous le collez ici, vous
verrez ce qui se passe.
Maintenant, débarrassons-nous de cela parce que
cela ne fait que rendre les couleurs pas agréables.
(marmonne), en fait, je vais juste faire un commentaire à ce sujet.
Cela va faire une sélection * parmi
les comptes où le nom d'utilisateur
est égal à admin, sélectionnez et exécutez ce que nous voulons.
C'est très grave et il est très difficile de se protéger.
Comme je l'ai dit, en utilisant des
filtres et d'autres éléments, nous ne ferons que cacher le problème, nous ne le résoudrons pas.
La meilleure façon de
procéder consiste à utiliser les instructions paramétrées de la même manière.
C'est le moyen le plus sûr de le faire.
Tout d’abord, vous préparez votre déclaration.
La plupart des langages comme PHP
et tous, ils ont en fait une fonction comme celle-là.
Vous pouvez préparer select * from comptes où le
nom d'utilisateur est égal au point d'interrogation.
Ensuite, vous envoyez les valeurs.
Donc, PHP sait maintenant.
L'instruction SQL est select * parmi les comptes où
nom d'utilisateur est égal à quelque chose.
Ensuite, ça va prendre la valeur de textbox1.
Ainsi, même si nous entrons et que
nous utilisons notre déclaration très sournoise
ici, et que
nous la collons ici, l'application Web saura que la valeur
de ce paramètre est admin union select.
En fait, il va
essayer de sélectionner * parmi les comptes dont
le nom d'utilisateur, puis d'ajouter des guillemets
et d'essayer de trouver un nom d'utilisateur avec le nom d'utilisateur suivant.
Tout cela sera exécuté comme tel.
Donc, ce sera select * parmi
les comptes dont le nom d'utilisateur est égal à admin union
select, ce hashtag.
Tout ce que vous mettez dans votre zone de texte sera envoyé en tant que valeur.
L'application Web saura qu'il s'agit d'une
valeur, ce n'est pas un code et ne l'exécutera jamais.
Par conséquent, cela vous protégera contre les injections SQL.
Vous pouvez utiliser les filtres comme deuxième ligne
de défense et je vous conseille
également d'utiliser le moins de privilèges possible.
Pour chaque base de données, utilisez un utilisateur avec
le moins de privilèges qu'il souhaite.
Ne laissez pas les utilisateurs faire ce qu'ils veulent.
S'il s'agit d'un simple site Web qui ne fait que la sélection, alors
n'autorisez que l'utilisateur à le sélectionner.
S'il doit seulement sélectionner et insérer,
ne leur permettez que de sélectionner et d'insérer.
C'est une règle que vous devriez garder avec tout,
même avec les systèmes Linux.
Assurez-vous que les autorisations sont toujours le moins possible.
Chaque utilisateur ne dispose d'aucune autorisation supplémentaire dont il
n'a pas besoin.