Pour une raison quelconque, le Appmodel-> updateAll () code >
méthode n'échappe pas aux données qui y sont transmises. Regard sur la documentation cependant, je ne trouve rien sur la manière dont vous échappez à des données avec CakePHP. P>
bas dans datasources / dbo / dbo_mysql.php code> J'ai trouvé la méthode
valeur () code> qui semble utiliser
mysql_real_escape_string () code> - mais Comment accédez-vous cette méthode de la méthode dans les modèles? P>
3 Réponses :
pour la plupart em> des fonctions de modèle de CakePHP que vous n'avez pas à vous soucier de l'échappement de l'entrée. CakePHP vous protège déjà contre
Injection SQL Si vous utilisez: p>
pour la désinfectation contre les XSS
c'est généralement préférable d'enregistrer HTML cru
Dans la base de données sans modification et
désinfecter au moment de
sortie / affichage. p>
voir https://book.cakephp.org/ 2.0 / FR / CORE-UTILITY-Bibliothèques / Sanitize.html
Cependant, il y a d'autres cas lorsque vous devez exécuter une requête ou une sous-requête personnalisée SQL. Dans ces cas, vous pouvez soit: P>
blockQuote>
Rechercher () CODE> et
Enregistrer () CODE>) Plus: LI>
array ('champ' => $ valeur) code>) au lieu de
SQL cru. li>
ol>
Conditions préparées H2>
"'" . mysql_real_escape_string($data, $this->MyModel->getDataSource()->connection) . "'"
Tandis que c'est vrai avec Certaines fonctions d'ormes b> (Crazy hein?) Ce n'est pas vrai en ce qui concerne la méthode UpdateAll (). Toutefois, ce lien que vous avez posté mène me conduire à Sanitize :: ESPASSE (String $ (String $ String, String $ Connection) Code> Donc, j'ai juste besoin de déterminer comment obtenir le nom de la connexion.
J'ai la même question que la question initiale, avez-vous déjà trouvé comment utiliser Sanitize :: Escape?
@ Inférencez-vous à utiliser Valeur () Code> Méthode décrit dans link dans le modèle, vous pouvez utiliser
$ $ datasource = $ ceci-> getdatasource (); code> $ ESCAPEDVALUE = $ Datasource-> valeur ($ RAWVALUE); code> dans le contrôleur, utilisez
$ $ DataSource = $ ceci-> ModelName-> getdatasource (); code> où modèleName est nom de n'importe quel modèle accessible à partir de ce contrôleur.
@Meam Votre réponse devrait être la vraie ~ Vous devriez le poster comme une réponse, puis laissez-moi vous donner un uppote!
Galen, j'ai édité votre message pour inclure les autres options que d'autres ont commenté. J'espère que ça va.
AVERTISSEMENT: Le support exact des déclarations préparées dépend du conducteur. Par exemple, à partir de gâteau / 2.x SQLServer les supporte pour la lecture mais pas pour écrire .
Voici une solution alternative de faire des choses, à l'aide de Sanitize :: Paranoid: P>
http://www.ibm.com/developerworks/opensource / Bibliothèque / OS-PHP-CAKE3 / P>
SELECT * FROM models WHERE name = "somename";