Django full_clean方法与数据安全

Django full_clean方法与数据安全,django,django-models,Django,Django Models,我需要获取原始JSON数据,并使用Mymodel.objects.create(…)方法将其直接放入Django模型中。如果我在创建的实例上运行full_clean(),那么就潜在的SQL注入或任何可能被注入的恶意数据而言,它是否安全 我不使用表单的原因是表单上的逻辑非常复杂,因为它动态构建表单,所以我需要以json格式发布数据。我不想使用rest api,因为只有一个页面具有这种复杂性。不会对SQL注入执行任何检查,Django ORM也不会,因为它只是转义所有参数,所以即使数据包含SQL语句

我需要获取原始JSON数据,并使用Mymodel.objects.create(…)方法将其直接放入Django模型中。如果我在创建的实例上运行full_clean(),那么就潜在的SQL注入或任何可能被注入的恶意数据而言,它是否安全

我不使用表单的原因是表单上的逻辑非常复杂,因为它动态构建表单,所以我需要以json格式发布数据。我不想使用rest api,因为只有一个页面具有这种复杂性。

不会对SQL注入执行任何检查,Django ORM也不会,因为它只是转义所有参数,所以即使数据包含SQL语句,也会转义这些参数,因此,通常情况下,SQL注入是不可能的

但是您需要运行
full\u clean
来验证数据完整性。如果在模型上定义约束,通常会在
full\u clean
部分验证这些约束。ORM不运行这些查询

因此,您可以使用:

obj = Mymodel(**data)
obj.full_clean()
obj.save()
obj=Mymodel(**数据)
对象完全清洁()
对象保存()
我不使用表单的原因是表单上的逻辑非常复杂,因为它动态地构建表单


表单可以删除大量样板代码,因为它不仅执行验证,还进行清理,使错误消息更方便,等等。

Django ORM保护数据库不受SQL注入的影响,但输出由您负责。为了方便数据清理,我建议使用

通常Django的ORM是安全的,不受SQL注入的影响,但是您需要在之前进行完全清理,因为Django ORM不运行完全清理,这验证了数据的完整性。非常感谢,听起来应该没问题。我只是需要澄清一下,因为我不确定您是否必须通过表单运行数据才能使其安全。不安全的意思是它执行SQL注入否,但这并不意味着数据是有效的。假设一个人以某种方式发出POST请求,例如他“喜欢”一个不允许他使用其标识符查看的对象,然后他可能会看到POST,因为他设法输入了他喜欢该对象的记录。SQL注入并不是唯一的安全威胁。