2012-04-03 61 views
2

据我所知,Django's comments framework是为匿名公众评论而设计的,就像您在博客或artcile下面常见的一样。换句话说,任何人都可以发表评论。Django的评论框架和CSRF

我使用的评论框架只允许登录用户显示评论。什么I did was modify the form.html和隐藏nameURL,和email字段(保持安全字段完好)。所以用户几乎看不到comment字段。我想使用Django的评论,因为它已经有一些很好的安全功能,比如时间戳检查,蜜罐字段和反双重发布功能。从request.userRequestContext中获取用户信息,并且我获得有关comment.user.get_full_namecomment.namecomment.user.emailcomment.email相对的评论的用户信息。

我也开始阅读关于Django的CSRF保护。在大多数情况下,人们谈论CSRF如何防止黑客通过使用cookie或其他方式从登录用户的银行账户转账。

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

回答

3

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

CSRF是一种攻击,一个没有权限访问资源的人会欺骗有权访问它的人。

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

因此,如果没有CSRF保护,理论上可以让一个登录用户提交他们实际上没有写的评论。

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

+0

如果黑客注册并成功登录,并在尝试发表评论时,他会修改POST响应并将用户标识更改为除自己以外的其他内容(但保持其他所有内容相同,如CSRF)。他会不会以别人的身份发表评论? – hobbes3 2012-04-07 20:13:48

+0

这是否意味着,我应该忽略用户POST中的'comment.user',并在'views.py'下声明'comment.user = request.user.pk'? – hobbes3 2012-04-07 20:15:11

+0

@ hobbes3是的,这是避免伪造的方法。 – agf 2012-04-08 05:11:03