« MySQL/API » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 23 :
Si on s'attend à recevoir un nombre (ex : 42), et qu'en fait <code>$_POST</code> contient une chaine avec échappement ("'42' OR 1") cela change complètement son résultat :
<source lang=sql>
DELETE FROM `articles` WHERE `id`=42 -- supprimersupprime une ligne
DELETE FROM `articles` WHERE `id`=42 OR 1 -- supprime toutes les lignes (car 1 est toujours vrai)
</source>
 
L'utilisateur peut aussi insérer des commandes plus complexes séparées par des points-virgules :
Also in some cases, you try to make a query like this:
<source lang=sql>
SELECT * FROM `my_nice_tabletable1` WHERE title='bla bla' -- sélectionne
SELECT * FROM `my_nice_tabletable1` WHERE title='bla bla'; TRUNCATE TABLE `my_nice_tabletable1` -- supprime tout
</source>
 
And a user may turn it to something like this:
Par ailleurs, si un utilisateur découvre comment manipuler une base de cette façon, il peut très bien se créer un compte administrateur ensuite, et effectuer des modifications discrètes dans le but de récupérer de l'argent.
<source lang=sql>
SELECT * FROM `my_nice_table` WHERE title='bla bla'; TRUNCATE TABLE `my_nice_table`
</source>
These are just examples.
It's easy to realize if all records are disappeared from your tables.
If the tables are properly backed up, you can repopulate them.
But there are worst cases.
If a user learns how to manipulate your database, he can create an administration account for himself, or he can make modifications to your site's contents that you'll never see, or he can even register payments he has not made.
 
==== How to prevent that ====