Как избежать данных SQL в CakePHP?

По какой-то причине метод AppModel->updateAll() не передает данные, переданные ему. Однако, просматривая документацию, я не могу найти ничего о том, как вы фактически удаляете данные с помощью CakePHP.

Вниз в datasources/dbo/dbo_mysql.php Я нашел метод value() который, кажется, просто использует mysql_real_escape_string() но как вы mysql_real_escape_string() доступ к этому методу из моделей?

Related of "Как избежать данных SQL в CakePHP?"

Для большинства функций модели CakePHP вам не нужно беспокоиться об исключении ввода.

CakePHP уже защищает вас от SQL Injection, если вы используете:

  1. Методы ORM CakePHP (такие как find() и save() ) плюс:
  2. Правильная запись массива (т. 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() с помощью 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) . "'" 

Класс санитации

Раньше это был вариант, но он устарел от CakePHP 2.4.

 $name = "somename"; $db = $this->getDataSource(); $this->Model->query('SELECT * FROM models WHERE name = '.$db->value($name, 'string') . ';'); 

CakePHP заботится также о цитировании вашего ввода, потому что он помечен как строка.

 SELECT * FROM models WHERE name = "somename"; 

Вот альтернативный способ делать вещи, используя Sanitize :: paranoid:

http://www.ibm.com/developerworks/opensource/library/os-php-cake3/