« MySQL/API » : différence entre les versions
Contenu supprimé Contenu ajouté
Ligne 16 :
=== SQL Injections ===
====
Normalement les valeurs stockées dans <code>$_POST</code> peuvent être insérées directement dans des requêtes SQL. Toutefois les {{w|injection SQL|injections SQL}} exploitent une faille de sécurité engendrée par le caractère d’échappement.
==== Exemple ====
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
</source>
you may create statements like this instead:
<source lang=sql>
DELETE FROM `articles` WHERE `id`=42 OR 1
</source>
which DELETEs all records.
Also in some cases, you try to make a query like this:
<source lang=sql>
SELECT * FROM `my_nice_table` WHERE title='bla bla'
</source>
And a user may turn it to something like this:
<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.
|