首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django UpdateView -防止URL篡改

Django UpdateView -防止URL篡改
EN

Stack Overflow用户
提问于 2022-08-03 15:22:12
回答 1查看 25关注 0票数 0

我有个联络模型。url.py有:

代码语言:javascript
复制
path('contact/update/<int:id>/', views.ContactUpdate.as_view(), name='contact-update'),

UpdateView看起来像:

代码语言:javascript
复制
class ContactUpdate(UpdateView):
    model = Contacts
    form_class = ContactForm
    template_name = 'contact_detail.html'
    success_url = reverse_lazy('test:contacts-list')

pk不包括在表单的字段中。

代码语言:javascript
复制
class ContactForm(ModelForm):
    class Meta:
        model = Contacts
        fields = ['name', 'company', 'addr1', 'addr2', 'city', 'state', 'zip']

但pk是在网址中发送的。表单在模板中工作,联系人用上面的视图存储和编辑,没有问题。

但是,如果恶意用户(登录用户)更改post url以反映不同的pk,Django将很高兴地编辑被攻击的记录。

代码语言:javascript
复制
ORIGINAL GET URL: http://test.com/test/contact/update/2/
HACKED POST URL: http://test.com/test/contact/update/3/

Django将更新记录的pk值为3。会话和csrf令牌都是有效的,因此没有任何标志为错误。

除了使用带有uuid的会话变量(uuid被发送到表单中并在返回时使用它来获取原始pk )之外,还有什么方法可以防止这种情况吗?

谢谢你的建议。

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 17:09:00

用户仅限于在他们的state.So中编辑联系人,他们对联系人模型有编辑权限。我通过使用UserPassesTestMixin测试UpdateView中get和post的用户权限来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73223843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档