PDO : problème avec methode quote() ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PDO : problème avec methode quote() ?

par x@v » 28 janv. 2009, 14:08

aucun second degré, juste que sa clarifie ce qui était flou pour moi. protection des valeurs automatique.
excellent

par Ripat » 28 janv. 2009, 13:17

pour moi c'est clair, merci :)
Pas perçu le deuxième degré de tes remarques alors. Désolé.

par x@v » 28 janv. 2009, 12:35

pour moi c'est clair, merci :)

par Ripat » 28 janv. 2009, 09:33

d'ou tu tiens l'inforamtion ?
:)
La doc, des essais personnels et http://www.google.be/search?q=pdo+prepare+injection+sql

par x@v » 26 janv. 2009, 17:10

d'ou tu tiens l'inforamtion ?
:)

par Ripat » 26 janv. 2009, 08:37

Avec les requêtes préparées avons nous besoin d'utilisés la méthode quote ?
:)
Absolument pas, c'est même la méthode recommandée pour se protéger contre les injections. Voir la citation de mon post plus haut.

par x@v » 26 janv. 2009, 00:17

Avec les requêtes préparées avons nous besoin d'utilisés la méthode quote ?
:)

par Natolumin » 25 janv. 2009, 21:11

$cnx->quote($idNews, PDO::PARAM_STR);
        $cnx->quote($titre, PDO::PARAM_STR);
        $cnx->quote($date, PDO::PARAM_STR);
        $cnx->quote($content, PDO::PARAM_STR);
        $cnx->quote($auteur, PDO::PARAM_INT);
        $req = "UPDATE news SET titre = '".$titre."', date = '".$date."', content = '".$content."', etat = ".$etat.", idUser = ".$auteur." WHERE idNews = ".$idNews."";
        $res = $cnx->exec($req); 
En fait, la méthode quote s'occupe des ' à votre place, ils sont donc superflus dans la requête...

Ce qui nous donne :
$cnx->quote($idNews, PDO::PARAM_STR);
        $cnx->quote($titre, PDO::PARAM_STR);
        $cnx->quote($date, PDO::PARAM_STR);
        $cnx->quote($content, PDO::PARAM_STR);
        $cnx->quote($auteur, PDO::PARAM_INT);
        $req = 'UPDATE news SET titre = '.$titre.', date = '.$date.', content = '.$content.', etat = '.$etat.', idUser = '.$auteur.' WHERE idNews = '$idNews.'';
        $res = $cnx->exec($req); 
J'en ai profité pour changer les doubles quote en simples, c'est pas bon pour les performances ces petites bêtes...

par stopher » 20 janv. 2009, 09:14

Salut ,
$cnx->quote($idNews, PDO::PARAM_STR);
        $cnx->quote($titre, PDO::PARAM_STR);
        $cnx->quote($date, PDO::PARAM_STR);
        $cnx->quote($content, PDO::PARAM_STR);
        $cnx->quote($auteur, PDO::PARAM_INT);
        $req = "UPDATE news SET titre = '".$titre."', date = '".$date."', content = '".$content."', etat = ".$etat.", idUser = ".$auteur." WHERE idNews = ".$idNews."";
        $res = $cnx->exec($req);
Ici , déjà pour plus de lisibilité , tu peux enlever PDO::PARAM_STR étant la valeur par défaut .

Maintenant quelque chose m'échappe , tu ne recupére pas tes chaines échappées ? ce n'est pas une référence que tu met dans la méthode quote .. et ici , aucune chaine que tu échappes n'est récupérés ..

Ensuite , pour voir exactement ce qui se passe , affiche à l'écran ta variable $req pour voir ou ca plante ..

Mais pour moi le code ci -dessous fonctionnerai dejà mieux :
$req = "UPDATE 
			news 
		SET 
			titre 	    = '".$cnx->quote($titre)."',
			date      = '".$cnx->quote($date)."',
			content  = '".$cnx->quote($content)."',
			etat 	    = ".$cnx->quote($etat).",
			idUser   = ".$cnx->quote($auteur)."
		WHERE 
			idNews  = ".$cnx->quote($idNews)."
		LIMIT 1";

$res = $cnx->exec($req);

par x@v » 20 janv. 2009, 01:13

donc si ont a ce genre de méthode, ont est théoriquement protégé contre les injection ?
		try
		{
			$this->con = parent::beginTransaction();
			//$result= parent::query($reqSelect);
			$result = parent::prepare($reqSelect);
			$result->execute();
			$this->con = parent::commit();
			// ou
			// $this->con = parent::rollBack();
	  		return $result;
		}
		catch (Exception $e) 
		{
			//On indique par email que la requ�te n'a pas fonctionn�.
			error_log(date('D/m/y').' � '.date("H:i:s").' : '.$e->getMessage(), 1, $this->email);
			$this->con =parent::rollBack();
			$message= new Message();
			$message->outPut('Erreur dans la requ�tte', 'Votre requ�te a �t� abandonn�');
		}
J'avais déjà lut cela quelque part !
Mais sur un forum ont m'avait bouffonner sur mon interprétation... :oops:

ou...

par skap64 » 20 janv. 2009, 00:08

ou tout simplement une requete mais si on commence avec les quotes, on finit...
<?php
$req = "UPDATE news SET titre = '$titre', date = '$date', content = '$content', etat = '$etat', idUser = '$auteur' WHERE idNews = '$idNews'"; 
// etc.......
?>

par Ripat » 19 janv. 2009, 20:18

Si vous utilisez cette fonction pour construire des requêtes SQL, vous êtes vivement invité à utiliser PDO::prepare() pour préparer les requêtes SQL avec des paramètres liées au lieu d'utiliser PDO::quote() pour interpréter les entrées utilisateurs dans la requête SQL. Les requêtes préparées avec des paramètres liées ne sont pas seulement plus portables, plus malléables et plus sécurisées mais bien plus rapides à exécuter que d'interpréter les requêtes, étant donné que les côtés client et serveur peuvent mettre en cache une version compilée de la requête.
Un truc du genre:
$req = "UPDATE news SET titre =:titre, date =:date, content =:content, etat =:etat, idUser =:auteur WHERE idNews =:news";
$valeurs = array(
	':news'    => $idNews,
	':titre'   => $titre,
	':date'    => $date,
    ':content' => $content
	':auteur'  => $auteur
	);
$res = $cnx->prepare($req);
$res->execute($valeurs);
Ensuite tu traverses le recordset $res avec $res->fetch(PDO::FETCH_ASSOC) ou fetchAll().

Si tu tiens à $cnx->quote() essaye sans les simples quote:
$req = "UPDATE news SET titre = ".$titre.", date = ".$date.", content = ".$content.", etat = ".$etat.", idUser = ".$auteur." WHERE idNews = ".$idNews."";

PDO : problème avec methode quote() ?

par supercanard » 19 janv. 2009, 19:38

Bonjour,

J'ai l'impression d'avoir un soucis avec la méthode quote de PDO.

Le code ci dessous se trouve dans une methode. A signaler que les magic quotes sont désactivées.
Lorsque dans le contenu dans mes variables il y a un apostrophe, l'enregistrement ne se fait pas. Comme je découvre tout juste PDO je n'ai pas encore trouvé comment retourner les erreurs, mais je suis sur que ça vient de là après plusieurs test.

Y aurait-il un soucis dans mon code ?
$cnx->quote($idNews, PDO::PARAM_STR);
		$cnx->quote($titre, PDO::PARAM_STR);
		$cnx->quote($date, PDO::PARAM_STR);
		$cnx->quote($content, PDO::PARAM_STR);
		$cnx->quote($auteur, PDO::PARAM_INT);
		$req = "UPDATE news SET titre = '".$titre."', date = '".$date."', content = '".$content."', etat = ".$etat.", idUser = ".$auteur." WHERE idNews = ".$idNews."";
		$res = $cnx->exec($req);