Должен ли я дезинфицировать свои входные данные при использовании методов установки для заполнения сущности Doctrine?
У меня сложилось впечатление, что ORM использует какую-то технику санитарии, но я не уверен. Я посмотрел на http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/security.html и не совсем понял по этому вопросу.
Вопрос
Будет ли безопасно использовать
$product = new Product();
$product->setModel($_POST['model']);
где POST НЕ санируется ранее, или я должен всегда санировать / проверять свои значения перед отправкой их в Doctrine?
Для справки
/**
* @Entity
*/
class Product
{
/**
* @var integer @Column(name="id", type="integer", nullable=false)
* @Id @GeneratedValue
*/
private $id;
/**
* @var string @Column(type="string")
*/
private $model;
}
2 ответа
Вы должны всегда проверять / дезинфицировать пользователя. Несмотря на то, что Doctrine использует подготовленные запросы (что предотвращает SQL-инъекции), вы не защищены от других атак.
Проверьте эту страницу, чтобы увидеть, как обращаться с входными данными в Doctrine:
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/security.html
Вы правы, Doctrine ORM выполняет всю санитарную обработку автоматически. Поэтому, пока вы используете ORM, вы в полной безопасности.
Таким образом, в вашем примере дополнительная очистка не требуется.
Я бы только сказал, что вместо использования необработанного массива $_POST вы должны использовать объект Request, который автоматически вводится в ваш контроллер:
$product = new Product();
$product->setModel($request->get('model'));