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

Contenu supprimé Contenu ajouté
Ligne 16 :
=== SQL Injections ===
 
==== What are SQL Injections?Définition ====
 
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.
In a perfect world, you would know that values contained in $_POST are values that you can insert into a SQL statement. But in a perfect world there are no poverty or proprietary softwares, so this is not the case. Those values may contain attacks called "SQL Injections". When you expect values like "'42'", you may find values like "'42' OR 1". So, when you try to make a statements like this:
 
==== 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.