Doctrine orm 在使用setter方法填充条令实体时,我必须清理输入吗?
我的印象是ORM使用了某种卫生技术,但我不确定。我看了一下,不清楚这个问题 问题 使用安全吗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
$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时是不安全的。当您期望一个特定的数据类型(数字)而用户发送其他信息时,这是不安全的。-它将导致异常。最佳实践是“永远不要信任用户”,并始终验证和清理用户输入。