2016-06-12 48 views
1

我有一个问题可以防止攻击者操纵表单输入。防止使用Django表单操纵表单输入

比方说,我有一个客户的租赁要求。在Django中,有一个create_rental网址,说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有没有办法阻止或减轻这种情况?

+0

为什么要保护攻击者?在这种情况下,客户ID不应该是网址的一部分,但应该从会话中检索。 – e4c5

回答

0

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

说了这么多,看看Django Guardian

Django的监护人是Django的额外提供认证后端对象权限的实现。