【发布时间】:2016-06-12 07:14:10
【问题描述】:
我有一个问题要防止攻击者操纵表单输入。
假设我有一个客户的租赁请求。在 Django 中,有一个create_rental URL,比如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 中有没有办法防止或减轻这种情况?
【问题讨论】:
-
为什么要保护攻击者?在这种情况下,客户 ID 不应该是 url 的一部分,但应该从会话中检索。