【问题标题】:Django CSRF Protection with user-based get request具有基于用户的获取请求的 Django CSRF 保护
【发布时间】:2017-06-23 21:05:02
【问题描述】:

我的 django 应用中有以下“个人资料”视图:

@login_required
def user_profile(request):
    current_user = request.user
    student_profile = get_object_or_404(Student, student_user = current_user)
    reviews = StudentReview.objects.filter(target_student = student_profile).reverse()

    for stu_review in reviews:
        stu_review.review_seen = True
        stu_review.save()

    context = {
        'user': current_user,
        'profile': student_profile,
        'reviews': reviews,
        'is_logged_in': request.user.is_authenticated,
    }
    return render(request, 'polls/profile.html', context)

我想知道这段代码是否容易受到 CSRF 攻击。由于个人资料信息很敏感,而且个人资料信息是根据用户的身份显示的,我不确定是否有人可以尝试 CSRF 攻击来显示另一个用户的个人资料信息,或者 Django 的中间件是否会处理这个问题。我有许多行为相似的视图,因此我想确保这些信息没有风险。

【问题讨论】:

标签: django get csrf middleware


【解决方案1】:

GET 请求不受 Django 的 CSRF 中间件保护。 CSRF 攻击是可能的,但它不会泄露任何信息。

CSRF 攻击的工作方式是攻击者诱骗用户(受害者)访问特定页面。由于受害者访问了该页面,因此可以使用受害者的登录会话而不是攻击者的登录会话来授权该页面上的任何操作。但是,由于受害者访问了该页面,响应也会发送给受害者。攻击者无法读取响应(除非其他漏洞允许这样做,例如 XSS)。

在这个特定示例中,CSRF 攻击只能将针对受害者的评论标记为已查看,而受害者实际上并没有看到它们。您需要确定这是无害还是实际问题。

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 2015-10-15
    • 2019-01-25
    • 2013-10-07
    • 1970-01-01
    • 2022-10-17
    • 2011-08-29
    • 2014-02-19
    相关资源
    最近更新 更多