Page 1 sur 1
sécurité anti injection c'est bon?
Posté : 05 juin 2007, 18:01
par ouiouioui
Bonjour, je suis novice en ce qui concerne la sécurité, j'ai lu des centaines de pages sur le sujet, je crée un mini site avec compte et lors de l'enregistement aprés soumission d'un formulaire voici ma requête, est ce que c'est sécurisé?:
Code : Tout sélectionner
$mysql est ma connection mysql
function donnees_mysql($requete) {
global $mysql;
$result = mysql_query($requete, $mysql) or die('Erreur requête - ' . mysql_error());
return $result;
}
function clean($user) {
if(get_magic_quotes_gpc()) {
if(ini_get('magic_quotes_sybase')) {
$user = str_replace("''", "'", $user);
} else {
$user = stripslashes($user);
}
}
return $user;
}
$pass = md5($_POST['pass']); //je md5 le pass la car je le compare à une autre var
$user = clean($_POST['user']);
$query = sprintf("INSERT INTO " . $db['prefix'] . "_users (`user`, `pass`, `mail`) VALUES ('%s', '$pass', '%s')", mysql_real_escape_string($user, $mysql), mysql_real_escape_string($_POST['mail'], $mysql));
$requete_mysql = donnees_mysql($query, $mysql);
merci d'avance a ceux qui m'aiderons, car ainsi je peux créer des user '' ' text ' mais je ne sais pas faire d'injection sql donc je sais pas trop comment tester la sécurité

Posté : 06 juin 2007, 09:16
par jed
Pour ma part je sécurise mes requêtes avec la fonction mysql_real_escape_string(), cela s'avère suffisant...
Posté : 06 juin 2007, 12:34
par ouiouioui
Pour ma part je sécurise mes requêtes avec la fonction mysql_real_escape_string(), cela s'avère suffisant...
comme je fait ( voir code jusquau bout grâce au scroll

)?
ou tu utilise une autre méthode?
merci

Posté : 06 juin 2007, 13:15
par jed
Oui comme tu fais dans la dernière partie. Avec ça je pense pas que l'appel aux magic quotes soit indispensable.
Posté : 08 juin 2007, 11:12
par ouiouioui
d'accord merci.
Posté : 08 juin 2007, 13:03
par lux
J'ai lu ça sur les mysql_real_escape_strings :
http://ilia.ws/archives/103-mysql_real_ ... ments.html
Lisez aussi les commentaires en bas.
Donc en substance si je resume bien, mysql_real_escape_strings est sans danger mais en fonction du charset utilisé. Moi qui bosse en UTF-8, et que donc d'après les commentaire le problème ne se pose pas avec UTF-8, il faut juste penser à ajouter : SET NAMES 'UTF-8' dans la requete pour être 100% sur.
Le danger est-il réel ou pas, et la méthode de sécurisation est-elle meilleure ?
Posté : 08 juin 2007, 13:59
par Klomac
L'idéal est effectivement d'utiliser les requêtes préparées, qui sont vraiment sécurisées. Pour des petites requêtes rapides c'est pas forcément le plus "light" mais si vous ne faites pas d'usine à gaz ça devrait pas poser de problème

Posté : 08 juin 2007, 14:26
par lux
J'ai regardé comment fonctionnaient les requêtes préparés. A quel niveau cela présente-t'il un accroissement de la sécurité ?
Posté : 08 juin 2007, 16:21
par Klomac
Avec les requêtes préparées, l'échappement est fait automatiquement par la base de données en fonction du type du paramètre envoyé. Ainsi tu n'as aucun échappement à faire. Ca permet d'éviter un éventuel oublie de te part.
Posté : 08 juin 2007, 16:37
par lux
Ça me semble ce qu'il y a de mieux à faire oui. Maintenant faudrait que j'apprenne à m'en servir

Posté : 09 juin 2007, 13:06
par yuuzhantar
salut
je suis moi aussi en UTF-8 pour mes bases de données
la remarque de lux m'interresse et j'ai été voir la documentation qu'il a donné
mais je n'ai pas trop compris la différence entre SET_NAMES et SET CHARACTER SET
et laquelle me conseille tu ?
dois-je écrire le bout de code une fois après la connexion et il restera le temps de l'exécution du script ou dois-je le réécrire avant chaque requête ?
merci
Posté : 09 juin 2007, 18:11
par lux
Je viens de lire la
doc.
Ben même avec mon bon niveau d'anglais, j'ai pas tout pigé, c'est trop technique.
Je suppose qu'il faudrait même définir les 2, je sais pas. Si tu fais un SET NAMES avec la première requête, si j'ai bien suivi, les suivantes auront le même charset de connexion. Après je garantis rien, donc pour l'instant j'ai pas de solution, je fais juste un SET NAMES une fois dans la première requête c'est tout.
Après faudrait demander à qqn qui s'y connait. On a pas vraiment de réponse claire comment se protéger contre les injections SQL .... ça me chagrine un peu

Posté : 09 juin 2007, 22:29
par Invité
ok merci pour ton aide
++