1

我的印象是 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;
}
4

2 回答 2

2

您应该始终验证/清理用户输入。即使 Doctrine 使用准备好的查询(防止 SQL 注入),你也不能安全地抵御其他攻击。

查看此页面,了解如何处理 Doctrine 中的输入:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/security.html#user-input-and-doctrine-orm

于 2017-05-18T07:35:31.820 回答
-3

你是对的,Doctrine ORM 会自动完成所有的清理工作。因此,只要您使用 ORM,您就绝对安全

因此,在您的示例中,不需要额外的消毒。

我只想说,您应该使用自动注入控制器的 Request 对象,而不是使用原始 $_POST 数组:

$product = new Product();
$product->setModel($request->get('model'));
于 2017-05-18T13:49:49.143 回答