Как лучше всего использовать mysql_real_escape_string и htmlspecialchars при сохранении данных в CakePHP?

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

Вопрос

Я использую 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() не является хорошей практикой.

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

escape(string $string, string $connection)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top