Для большинства функций модели CakePHP вам не нужно беспокоиться о экранировании ввода.
CakePHP уже защищает вас от SQL-инъекций, если вы используете:
- Методы ORM в CakePHP (например,
find()
и save()
) плюс: - Правильная запись массива (т. Е.
array('field' => $value)
) вместо необработанного SQL.
Для санации против XSS, как правило, лучше сохранять необработанный HTML-код в базе данных без изменений и санировать во время вывода / отображения.
См. https://book.cakephp.org/2.0/en/core-utility-libraries/sanitize.html Однако в некоторых случаях необходимозапустить пользовательский запрос SQL или подзапрос.В этих случаях вы можете:
Использовать подготовленные операторы
$db->fetchAll(
'SELECT * from users where username = :username AND password = :password',
['username' => 'jhon','password' => '12345']
);
Выборочное экранирование с Model->getDataSource()->value()
$sql = 'SELECT * FROM table WHERE name = '
. $this->MyModel->getDataSource()->value($untrustedInput, 'string') . ';'
Функция value()
в основном экранируетсяи добавляет такие кавычки, как это:
"'" . mysql_real_escape_string($data, $this->MyModel->getDataSource()->connection) . "'"
Sanitize Class
Этот использовал в качестве опции, но устарел с CakePHP 2.4.