使用Django表单防止操纵表单输入

2024-05-23 17:10:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题是如何防止攻击者操纵表单输入

假设我有一个客户的租车请求。在Django中,有一个create_rentalURL,比如rent-website.com/customer/1/create_rental

因为在urls.py

url(r'^customer/(?P<pk>[0-9])/create_rental/'
    ,CreateRentalView.as_view()
    , name='customer_create_rental'),

Django Form类有一个for_customer属性。假设在forms.py

CreateRentalForm(forms.Form):
    for_customer= forms.IntegerField(..., widget=forms.HiddenInput())
    rental_title = forms.CharField()
    #and so on and so forth

在views.py中

CreateRentalView(FormMixin, DetailView):
    def get_form(self):
        super(CreateRentalView, self).get_form()
        self.base_fields['for_customer'].initial = self.kwargs['pk'] #in this case 1

最后,在模板中,您将拥有HTML 你知道吗

问题是,如果攻击者将该值更改为2,则可以为他可能不提供服务的客户添加该值

Django有没有办法防止或减轻这种情况


Tags: anddjangopyselfformfor客户so
1条回答
网友
1楼 · 发布于 2024-05-23 17:10:15

这是一个关于每个用户可以访问哪些对象的实现自己的逻辑的问题,与框架本身无关

话虽如此,看看Django Guardian

django-guardian is an implementation of object permissions for Django providing extra authentication backend.

相关问题 更多 >