Protection des requetes SQL

Mammouth du PHP | 725 Messages

25 nov. 2011, 03:47

Bonjour,

Je fais mes requetes par la methode query, comment puis je proteger mes donnees contre les injections, cote insert, select, update.
$sql = 'INSERT INTO commentaires VALUES (\'\', "'.$level1.'", "'.$level2.'", "'.$level3.'", "'.$num.'", "'.$commentaire.'", "'.$idpseudo.'", "'.$date_posted.'")';
$req = $connexion->query($sql);
merci

ViPHP
xTG
ViPHP | 7331 Messages

25 nov. 2011, 08:10

Utilises PDO::query().

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 nov. 2011, 09:21

Utilises PDO::query().
Tu voulais dit "quote" ? :mrgreen:
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

25 nov. 2011, 12:18

Oui ! :twisted:
Heureusement que j'ai pas doublement fauté, le lien reste correct. :P

Mammouth du PHP | 725 Messages

26 nov. 2011, 10:25

comme ca:
$level1 = $connexion->quote($level1, PDO::PARAM_INT);
$level2 = $connexion->quote($level2, PDO::PARAM_INT);
$level3 = $connexion->quote($level3, PDO::PARAM_INT);
$num = $connexion->quote($num, PDO::PARAM_INT);
$commentaire = $connexion->quote($commentaire, PDO::PARAM_STR);
$idpseudo = $connexion->quote($idpseudo, PDO::PARAM_INT);
$date_posted = $connexion->quote($date_posted, PDO::PARAM_STR);




$sql = 'INSERT INTO commentaires VALUES (\'\', "'.$level1.'", "'.$level2.'", "'.$level3.'", "'.$num.'", "'.$commentaire.'", "'.$idpseudo.'", "'.$date_posted.'")';

$req = $connexion->query($sql);

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 nov. 2011, 14:22

vi vi comme ça ;)
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

26 nov. 2011, 16:39

vi vi comme ça ;)
elle ajoute une apostrophe sur les entrees, est ce que c'est juste?

et pour les caracteres indesirables, j'utilise la methode normale (strip_tags,...), par exemple empecher les codes html...

ViPHP
xTG
ViPHP | 7331 Messages

26 nov. 2011, 17:47

C'est une fonction qui est utilisée aussi pour les requêtes préparées.
Donc en effet elle rajoute des quotes autour des chaînes de caractères.
Et ce à cause de la formalisation des requêtes préparées :
SELECT id, nom
FROM uneTable
WHERE nomCat = ? AND id > ?
On n'y indique aucune quote, et lors de l'ajout des paramètres la fonction les ajoute au besoin suivant le type de donnée.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 nov. 2011, 22:59

oui j'avais pas fait gaffe aux quote que tu avais mis.

Attention les quote ça dépend de ce que tu utilise comme type pour l’échappement. si tu utilise int il n'en met pas (les entier ne sont pas entouré par des quotes).

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

27 nov. 2011, 04:51

donc que dois je utiliser pour securiser mes requetes?

ViPHP
xTG
ViPHP | 7331 Messages

27 nov. 2011, 09:16

Bah je t'ai répondu non ? :shock:
De plus si tu as lu la documentation :
PDO::quote() place des guillemets simples autour d'une chaîne d'entrée, si nécessaire et protège les caractères spéciaux présents dans la chaîne d'entrée, en utilisant le style de protection approprié au pilote courant.