mysql_real_escape_string ou \"\"
Posté : 13 févr. 2011, 11:13
Bonjour à tous,
Je m'interroge sur une subtilité.
De ce que je lis ça et là, afin d'empecher les injéctions SQL, il faut appliquer mysql_real_escape_string sur toutes les variables saisies par un utilisateur dans un formulaire. Effectivement, si on fait comme ceci, ça craint :
Mais ce que je remarque dans quasiement tous les tutos, pour concater une variable PHP dans une chaine, sont utilisées les simples quotes :
En ce qui me concerne, j'ai toujours utilisé les guillemets échappés par un antislash, en ayant stocké les champs POST dans des variables, sans appliquer mysql_real_escape_string :
Mes questions sont simples :
Pourquoi concaténer à l'aide de simples quotes sachant que l'on s'expose ?
Concernant ma méthode : est-ce sécurisé ? Ou dois-je tout de même utiliser mysql_real_escape_string ?
Merci !
Je m'interroge sur une subtilité.
De ce que je lis ça et là, afin d'empecher les injéctions SQL, il faut appliquer mysql_real_escape_string sur toutes les variables saisies par un utilisateur dans un formulaire. Effectivement, si on fait comme ceci, ça craint :
Code : Tout sélectionner
Source : http://www.lephpfacile.com/manuel-php/function.mysql-real-escape-string.php
Exemple #2 Un exemple d'attaque par injection SQL
1. <?php
2. // Demande à la base de vérifier si un utilisateur correspond
3. $query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
4. mysql_query($query);
5.
6. // Nous ne vérifions pas $_POST['password'], il peut contenir ce que l'utilisateur veut ! Par exemple :
7. $_POST['username'] = 'aidan';
8. $_POST['password'] = "' OR ''='";
9.
10. // Cela signifie que la requête envoyée à MySQL sera :
11. echo $query;
12. ?>
La requête envoyée à MySQL :
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
Cela permet à n'importe qui de s'identifier sans mot de passe valide.
Code : Tout sélectionner
$query = "SELECT * FROM users WHERE user='{$_POST['username']}'] AND password='{$_POST['password']}'"; Code : Tout sélectionner
$username=$_POST['username'];
$password=$_POST['password'];
$query = "SELECT * FROM users WHERE user=\"$username\" AND password=\"$password\"";
Pourquoi concaténer à l'aide de simples quotes sachant que l'on s'expose ?
Concernant ma méthode : est-ce sécurisé ? Ou dois-je tout de même utiliser mysql_real_escape_string ?
Merci !