human
Comment fonctionne l'injection SQL. Je suis curieux de savoir comment et pourquoi cela fonctionne. Et comment tester la vulnérabilité d'un site web avec les commandes magiques " " ou 1=1 - - ". Explique comme si j'avais cinq ans.
gpt
Une base de données est composée de tables. Un tableau est essentiellement comme une feuille de calcul, où vous avez des colonnes et des lignes. Disons que nous avons une table où nous voulons stocker des informations sur les personnes. De quoi voulons-nous garder une trace ? Que diriez-vous du prénom, du nom, de la taille et de la couleur des yeux. Ces quatre choses dont nous voulons garder une trace deviennent nos noms de colonne. Maintenant, nous ajoutons une ligne au tableau pour chaque personne que nous voulons suivre. La rangée autour de moi pourrait dire ( Mmm , Vomit , 6'4 " , vert ) , ce qui signifie que mon prénom est " Mmm " , mon nom de famille est " Vomit " , je mesure 1,80 mètre et j'ai les cheveux verts Pour une autre personne, cela pourrait dire (John, Smith, 5'8", brun), ce qui signifie que John Smith mesure cinq pieds huit pouces et a les cheveux bruns. Ce tableau peut contenir des informations sur un grand nombre de personnes . Afin d'extraire des informations du tableau, je dois dire à l'ordinateur quelles informations m'intéressent. C'est à cela que sert SQL. J'écris une requête SQL , qui ressemble à ceci ... SELECT * FROM table WHERE condition ; Disons que je veux le rang de toutes les personnes aux cheveux bruns. Ma requête SQL ressemblerait à ceci . SELECT * FROM personnes WHERE hairColor = ' brown ' ; Cela signifie "Donnez-moi les lignes de la table people où la colonne hairColor a la valeur brown." Cela me donne alors la ligne pour John Smith, ainsi que toute autre personne aux cheveux bruns. Lors de l'écriture d'un programme, nous utiliserons des requêtes SQL contenant un espace vide. SELECT * FROM personnes WHERE hairColor = ' _ _ _ _ _ ' ; Nous demandons ensuite à la personne qui utilise l'ordinateur ce qui doit figurer dans cet espace vide. Si une personne dit à l'ordinateur de mettre « blond », la requête SQL ressemblera à ceci. SELECT * FROM personnes WHERE hairColor = ' blond ' ; On obtient alors toutes les rangées de personnes aux cheveux blonds. Eh bien , maintenant que se passe - t - il si quelqu'un met votre " ficelle magique " ? Vous obtenez une requête qui ressemble à ceci . SELECT * FROM personnes WHERE hairColor = ' ' ou 1=1 - - ' ; Voyez-vous ce qui s'est passé ? Le guillemet simple dans votre chaîne magique est maintenant la fin de la valeur correspondant à la couleur des cheveux. Cette requête recherche n'importe quelle ligne où la couleur des cheveux est un espace . Cela ne correspondra probablement à aucune ligne , mais la chaîne magique a également fait autre chose . Il a ajouté le mot ou . Cela signifie que la requête renverra toute ligne où " hairColor = ' ' " est vrai ou " 1=1 " est vrai . Puisque " 1=1 " est * toujours * vrai , cette requête renverra chaque ligne de la table , ce qui n'est pas ce que le programmeur voulait faire pour cette requête . Si un méchant malin fait cela à la bonne partie d'un programme, il peut obtenir des informations qu'il n'est pas censé avoir, ou faire en sorte que le programme fasse des choses qu'il n'est pas censé faire.