Должен ли я дезинфицировать свои входные данные при использовании методов установки для заполнения сущности 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'));
Другие вопросы по тегам