10
votes

Comment échappez-vous aux données SQL dans CakePHP?

Pour une raison quelconque, le Appmodel-> updateAll () 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.

bas dans datasources / dbo / dbo_mysql.php J'ai trouvé la méthode valeur () qui semble utiliser mysql_real_escape_string () - mais Comment accédez-vous cette méthode de la méthode dans les modèles?


0 commentaires

3 Réponses :


9
votes

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>

  1. orm de CakePHP Méthodes (telles que Rechercher () CODE> et Enregistrer () CODE>) Plus: LI>
  2. Notation de tableau appropriée (c.-à-d. array ('champ' => $ valeur) code>) au lieu de SQL cru. li> ol>

    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>

    Conditions préparées H2>
    "'" . mysql_real_escape_string($data, $this->MyModel->getDataSource()->connection) . "'"
    


6 commentaires

Tandis que c'est vrai avec Certaines fonctions d'ormes (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) 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 () Méthode décrit dans link dans le modèle, vous pouvez utiliser $ $ datasource = $ ceci-> getdatasource (); $ ESCAPEDVALUE = $ Datasource-> valeur ($ RAWVALUE); dans le contrôleur, utilisez $ $ DataSource = $ ceci-> ModelName-> getdatasource (); 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 .



-1
votes

Voici une solution alternative de faire des choses, à l'aide de Sanitize :: Paranoid:

http://www.ibm.com/developerworks/opensource / Bibliothèque / OS-PHP-CAKE3 /


0 commentaires

4
votes
SELECT * FROM models WHERE name = "somename";

0 commentaires