【问题标题】:Protecting against Manipulating form input with Django Forms防止使用 Django 表单操作表单输入
【发布时间】: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 的一部分,但应该从会话中检索。

标签: python django forms


【解决方案1】:

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

说了这么多,看看Django Guardian

django-guardian 是 Django 对象权限的实现,提供额外的身份验证后端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 2020-03-11
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多