2016-06-12 79 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的額外提供認證後端對象權限的實現。