Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何保护django隐藏输入表单免受恶意攻击?_Python_Django_Django Forms - Fatal编程技术网

Python 如何保护django隐藏输入表单免受恶意攻击?

Python 如何保护django隐藏输入表单免受恶意攻击?,python,django,django-forms,Python,Django,Django Forms,假设我在模板中呈现了以下表单: #表单 类别候选表格(models.ModelForm): 类元: 模型=候选人 字段=[ “电子邮件”#查菲尔德 “名字”,查菲尔德 “姓氏”,查菲尔德 “档案”#外键 ] #父模型 班级候选人(models.Model): email=models.EmailField() first_name=models.CharField(最大长度=64,空白=True,空=True) last_name=models.CharField(max_length=64,b

假设我在模板中呈现了以下表单:

#表单
类别候选表格(models.ModelForm):
类元:
模型=候选人
字段=[
“电子邮件”#查菲尔德
“名字”,查菲尔德
“姓氏”,查菲尔德
“档案”#外键
]
#父模型
班级候选人(models.Model):
email=models.EmailField()
first_name=models.CharField(最大长度=64,空白=True,空=True)
last_name=models.CharField(max_length=64,blank=True,null=True)
档案=models.ForeignKey(档案,on_delete=models.CASCADE)
这是一种古典形式,没有什么新奇之处。
档案
字段是一个隐藏输入

def候选人表格(申请、档案、候选人id):
档案=获取对象或404(档案,uuid=档案)
候选对象=获取对象或404(候选对象,id=候选对象id,档案库id=档案库id)
如果request.method==“GET”:
form=CandidateTourForm(实例=Candidate,)
elif request.method==“POST”:
表格=候选表格(request.POST)
如果form.is_valid()和assertDataIsLegit(form._meta.model):#请参见下文
candidate=form.save()
返回重定向(
“主要:文件之旅”,卷宗编号=卷宗编号,候选人编号=候选人编号
)
返回渲染(
要求
“candidate/candidate_form_tour.html”,
{
“形式”:形式,
“候选人”:候选人,
“档案室”:档案室,
},
)
当我用POSTMAN测试这个视图并在GET请求中放置一个与表单中收到的文档id无关的文档id时,候选对象被保存到错误的文档中

我想创建一个像这样的助手函数

def assertDataIsLegit(_object, _id, _id2):
    _type = type(_object)
    instance = _type.objects.get(id=_id)
    return instance.id == _id2
并调用它来验证post请求返回的档案id是否与原始档案匹配:

if form.is_valid() and assertDataIsLegit(form._meta.model, dossier.id, form.cleaned_data['dossier']):
   #do stuff save and all
但我很肯定有更好的方法。 我已经研究了表单的
clean
方法,但是因为我需要验证相关数据,所以我不确定这是好方法

你将如何防止这种情况?我知道你不应该信任发送的数据并验证它。 您能在查看功能中验证它吗?以一种形式方法?
欢迎任何线索

我投票结束这个问题,因为这似乎是一个关于计算机和互联网安全(netsec)的问题,而不是一个关于编程的问题。试试看。我不同意,这完全是关于编程的。我正在寻找一种方法来智能地验证接收到的数据。它与django和python相关。我知道我该怎么做(对于每个django视图,函数的方式都很糟糕),但我正在寻找更聪明的替代方案。使用forms方法或任何其他方法。