在使用 setter 方法填充教义实体时,我必须清理我的输入吗?



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

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

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

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

你是对的,Doctrine ORM正在自动进行所有清理。因此,只要您使用ORM,您就是完全安全的

因此,在您的示例中,不需要额外的清理。

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

$product = new Product();
$product->setModel($request->get('model'));

相关内容

  • 没有找到相关文章

最新更新