Doctrine orm 在使用setter方法填充条令实体时,我必须清理输入吗?

Doctrine orm 在使用setter方法填充条令实体时,我必须清理输入吗?,doctrine-orm,doctrine,sql-injection,input-sanitization,Doctrine Orm,Doctrine,Sql Injection,Input Sanitization,我的印象是ORM使用了某种卫生技术,但我不确定。我看了一下,不清楚这个问题 问题 使用安全吗 $product = new Product(); $product->setModel($_POST['model']); 如果先前未对帖子进行清理,或者在将其发送给条令之前,我必须首先清理/验证我的值吗 供参考 /** * @Entity */ class Product { /** * @var integer @Column(name="id", type="in

我的印象是ORM使用了某种卫生技术,但我不确定。我看了一下,不清楚这个问题

问题

使用安全吗

$product = new Product();
$product->setModel($_POST['model']);
如果先前未对帖子进行清理,或者在将其发送给条令之前,我必须首先清理/验证我的值吗

供参考

/**
 * @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注入),您也无法抵御其他攻击

查看本页,了解如何处理条令中的输入:


你说得对,ORM正在自动进行所有消毒。因此,只要您使用ORM,您就非常安全

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

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

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

条令使用预先准备好的语句,因此可以防止sql注入。仍然由您来验证您的数据。谢谢。在我的例子中,我使用的是一个原始的$\u帖子,因为我没有设置完整的框架支持。只是原则+选择库API。尽管你的答案仍然有效,但这取决于所使用的框架。我认为你并不“完全安全”。您只能安全地抵御SQL注入攻击。开始使用DQL时是不安全的。当您期望一个特定的数据类型(数字)而用户发送其他信息时,这是不安全的。-它将导致异常。最佳实践是“永远不要信任用户”,并始终验证和清理用户输入。