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