[Réglé] caractères possible sans risque

caractères possible sans risque [Réglé] - SQL/NoSQL - Programmation

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:

Code :
  1. "`player` LIKE '%" . $searchplayer[1] . "%'";


 
$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
Reply

Marsh Posté le 25-06-2008 à 15:17:16   

Reply

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


Message édité par masklinn le 25-06-2008 à 16:27:46

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

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)

Message cité 1 fois
Message édité par ouiouioui10 le 26-06-2008 à 17:57:46
Reply

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.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-06-2008 à 21:06:52    

ok merci.

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed