【问题标题】:Django's comments framework and CSRFDjango的评论框架和CSRF
【发布时间】:2012-04-16 18:39:26
【问题描述】:

我了解Django's comments framework 是为匿名公共 cmets 设计的,就像您通常在博客或文章下方看到的那样。换句话说,任何人都可以发布 cmets。

我使用 cmets 框架只允许登录用户显示 cmets。什么I did was modify the form.html 并隐藏了nameURLemail 字段(保持安全字段不变)。所以几乎用户只看到一个comment 字段。我想使用 Django 的 cmets,因为它已经具有一些不错的安全功能,例如时间戳检查、蜜罐字段和防双重发布功能。用户信息是从request.user RequestContext 获取的,我通过comment.user.get_full_name 获取有关评论的用户信息,而不是comment.namecomment.user.email vs comment.email

我也开始阅读 Django 的 CSRF 保护。在大多数情况下,人们谈论 CSRF 如何防止黑客使用他们的 cookie 或其他东西从登录的用户的银行账户中转移资金。

就我而言,CSRF 是否会阻止人们以其他用户的身份发帖?换句话说,黑客可以创建自己的 POST 表单并在不同的user.pk 下发布以伪造其他人吗?

【问题讨论】:

    标签: python django csrf django-comments django-csrf


    【解决方案1】:

    直接回答您的问题 - 不,CSRF 不允许黑客冒充其他用户并提交评论。它可能允许攻击者让真实的登录用户为他们提交评论。

    CSRF 是一种攻击,其中未经许可访问资源的人欺骗有权访问资源的人。

    因此,例如,CSRF 保护可以防止有人诱骗用户发布带有垃圾邮件或恶意软件链接的评论。或者,他们诱骗用户提出的请求可能格式不正确、导致您的网络服务器崩溃,或包含旨在通过验证过程并导致数据库损坏或以其他方式损害您的网站的代码。

    因此,如果没有 CSRF 保护,理论上有人可以欺骗已登录的用户提交他们实际上并没有写的评论。

    有了 CSRF 保护,Django 将检测到它不是通过您网站上的实际表单提交的真实数据,并将拒绝它。

    【讨论】:

    • 如果黑客注册并成功登录,并且在尝试发表评论时,他修改了 POST 响应并将用户 ID 更改为他自己的其他东西(但保持其他一切不变,就像 CSRF 一样)。那他就不能以其他人的身份发表评论了吗?
    • 这是否意味着,我应该简单地忽略用户POST中的comment.user,并在views.py下声明comment.user = request.user.pk之类的东西?
    • @hobbes3 是的,这是避免被伪造的方法。
    • 好的,谢谢您的建议。回到我的问题,我对关于伪造用户 cmets 的黑客场景的假设是否可能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多