caractères possible sans risque [Réglé] - SQL/NoSQL - Programmation
Marsh Posté le 25-06-2008 à 16:25:00
http://fr3.php.net/mysql_real_escape_string
Ou encore mieux, mysqli prepared statements + bound parameters
Ou encore passer par un ORM
Marsh Posté le 26-06-2008 à 17:57:18
merci pour la réponse je connais mysql_real_escape_string mais pas les deux autres, je n'est pas intaller avec mysqli, j'y penserai au prochain update.
donc il faut utiliser mysql_real_escape_string, ok mais j'aime comprendre quel risque j'encours sans avec les possibilités que j'ai donné?
j'utilise preg_match pour sélectionner dans la variable les caractères valide et afficher un avertissement si le résultat correspond pas à la saisie.
je souhaite avoir un code le plus court et rapide possible (comme tout le monde je sais)
Marsh Posté le 26-06-2008 à 18:04:46
ouiouioui10 a écrit : donc il faut utiliser mysql_real_escape_string, ok mais j'aime comprendre quel risque j'encours sans avec les possibilités que j'ai donné? |
Au vu de ce que tu laisses passer normalement rien, mais dans les faits tu peux toujours avoir un bug ou autre, donc autant systématiquement passer mysql_real_escape_string sur tous les paramètres que tu fournis à une DB, ça coûte rien et ça peut sauver ton site.
Marsh Posté le 01-07-2008 à 17:39:05
ceci dit, mysql_real_escape_string a exactement le même problème que la vérif à la main : le vrai bug, c'est le gars qui passe dans le code, bidouille pour tester un truc, et oublie de remettre la fonction, ou se plante en l'écrivant.
les deux solutions prepared statement et orm sont bien meilleures, puisqu'une fois qu'on prends l'habitude de les écrire de la sorte, on ne trouve plus jamais la moindre variable PHP dans les requêtes SQL.
et ça a d'autres avantages, tels que s'assurer qu'on envoie des données valides avant qu'elles ne partent vers le serveur, sans oublier que les performances sont cosnidérablement améliorée avec les prepared, puisque la requête ne sera compilée qu'une fois, quelles que soit les varibales passées en paramètres, alors que sans, elle doit être recompilée à chaque caractères qui change dans la chaîne SQL
Marsh Posté le 25-06-2008 à 15:17:16
Bonjour, j'ai un site sur lequel j'ai ajouté la possibilité de rechercher un joueur dans la base de données
ma fin de requête:
$searchplayer[1] contient uniquement après vérification de 3 à 30 caractères, caractères autorisés:
0 à 9 A à Z @ = ^ - _ | { } [ ] ( ) . : espace
selon moi aucun risque, mais je voulais votre avis
merci.
Message édité par ouiouioui10 le 26-06-2008 à 21:07:58