Каков наилучший способ использовать mysql_real_escape_string и htmlspecialchars при сохранении данных в CakePHP? - PullRequest
1 голос
/ 05 июня 2009

Я использую FCKEditor с CakePHP, и когда я сохраняю данные, отправленные из редактора, я хочу запустить функции htmlspecialchars () и mysql_real_escape_string () для очистки данных перед их сохранением в базе данных. Проблема в том, что я не совсем уверен, где это можно сделать в рамках CakePHP. Я попробовал в контроллере так:

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'));
      }

   }
}

Однако $ this-> data - это массив, и эти функции ожидают строки, поэтому они не будут работать. Я делаю это в массиве проверки модели? Я понятия не имею. Кроме того, дайте мне знать, если запуск htmlspecialchars () внутри mysql_real_escape_string () не является хорошей практикой.

Ответы [ 3 ]

3 голосов
/ 05 июня 2009

Не используйте htmlspecialchars() при сохранении данных, используйте его при выводе данных в HTML. Что если вам нужно посмотреть на данные в каком-то другом контексте, кроме HTML?

Также я не пользователь Cake, но я был бы удивлен, если вам нужно применить mysql_real_escape_string() при сохранении данных. Уровень доступа к базе данных должен защищать вас от внедрения SQL-кода, и, выполнив это вручную, вы в конечном итоге будете хранить строки с двойным экранированием.

1 голос
/ 25 сентября 2011

Если вы создаете свои собственные строки SQL с помощью CakePHP, то CakePHP предоставляет функцию escape:

escape(string $string, string $connection)

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

1 голос
/ 05 июня 2009

Короткий и простой ответ: если доступ к базе данных был ограничен, вам вообще не нужно вызывать эти функции.

Единственное место, где они нужны, - это если вы строите настоящий SQL из битов строк. Что вы не должны делать в любом случае, но это другая история.

Суть в том, что фреймворк будет делать правильные вещи, не мешать.

РЕДАКТИРОВАТЬ: Как указывает Билл Карвин - htmlspecialchars() из совершенно неправильного отдела здесь.

...