【问题标题】:Django - Editing an existing recordDjango - 编辑现有记录
【发布时间】:2014-12-28 19:05:31
【问题描述】:

我有一个关于 this answer 的问题,还有一个关于使用 Django 编辑现有模型记录的问题。

如果您有编辑记录的视图

def edit(request, id):
...

恶意用户是否可以更改表单的action 中的id 以编辑他最初访问的编辑页面以外的记录?换句话说,为什么将 id 放在对视图的调用中而不是通过 POST 传递 id 是安全的?

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    您似乎错过了这部分答案:

    @login_required
    def edit(request, id=None, template_name='article_edit_template.html'):
        if id:
            article = get_object_or_404(Article, pk=id)
            if article.author != request.user:
                return HttpResponseForbidden()
        else:
            article = Article(author=request.user)
    

    您可以看到我们检查当前登录的用户是否是帖子的作者。如果不是这种情况,我们会返回一个 HttpResponseForbidden。

    就像您正确地指出任何用户都可以更改 url 中的 id 并尝试查看不同记录的编辑页面一样,您有责任确保只有正确的用户可以编辑帖子。

    【讨论】:

    • 即便如此,这允许用户编辑他的任何文章,即使他来自文章 123 的编辑页面。我认为以某种方式限制用户会是更好的做法从编辑除 123 以外的任何文章,如果这是他首先访问的编辑页面。
    • 我看不出有什么问题。为什么你需要这样的限制?你将如何实施它?一个额外的模型字段?看起来很多余,你有什么收获?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2013-06-18
    • 2020-09-01
    • 2019-04-08
    • 1970-01-01
    相关资源
    最近更新 更多