Как лучше всего использовать mysql_real_escape_string и htmlspecialchars при сохранении данных в CakePHP?
-
12-09-2019 - |
Вопрос
Я использую 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)