Quelle est la meilleure façon d'utiliser mysql_real_escape_string et htmlspecialchars tout en économisant les données dans CakePHP?

StackOverflow https://stackoverflow.com/questions/956761

Question

J'utilise FCKEditor avec CakePHP et lorsque j'enregistre les données envoyées par l'éditeur que je veux exécuter les htmlspecialchars () et mysql_real_escape_string () sur les données pour le nettoyer avant de le stocker dans ma base de données. Le problème est que je ne suis pas vraiment sûr où faire cela dans le cadre CakePHP. J'ai essayé dans le contrôleur comme ceci:

function add() 
{
   if (!empty($this->data)) 
   {
      if ($this->Article->save(mysql_real_escape_string(htmlspecialchars($this->data)))) 
      {
         $this->Session->setFlash('Your article has been saved.');
     $this->redirect(array('action' => 'index'));
      }

   }
}

Toutefois $ this-> données est un tableau et ces fonctions attendent des chaînes afin que ne fonctionnera pas. Est-ce que je le fais dans le tableau de validation du modèle? Je n'ai aucune idée. Aussi, laissez-moi savoir si vous utilisez htmlspecialchars () à l'intérieur de mysql_real_escape_string () n'est pas une bonne pratique.

Était-ce utile?

La solution

Ne pas utiliser htmlspecialchars() lorsque vous Enregistrer données, l'utiliser lorsque vous données de sortie au format HTML. Que faire si vous avez besoin de regarder les données dans un contexte autre que HTML?

Aussi je ne suis pas un utilisateur de gâteau, mais je serais surpris si vous devez appliquer mysql_real_escape_string() que vous enregistrez soit des données. La couche d'accès de base de données devrait vous protéger contre l'injection SQL, et en le faisant, vous êtes manuellement va finir par stocker des chaînes doublement échappées.

Autres conseils

Le court et simple réponse est - si l'accès base de données a été loin abstraire, il n'y a pas besoin pour vous d'appeler ces fonctions tout.

Le seul endroit où ils sont nécessaires si vous construisez est SQL réelle à partir des bits de chaînes. Ce qui vous ne devriez pas faire de toute façon, mais c'est une autre histoire.

En bout de ligne est - le cadre fera la bonne chose, ne pas interférer

.

EDIT:. Comme Bill Karwin souligne - htmlspecialchars() est du département tout à fait tort ici

Si vous construisez vos propres chaînes SQL avec CakePHP, puis CakePHP fournit la fonction d'échappement:

escape(string $string, string $connection)

http://book.cakephp.org/view/1186/escape

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top