2012-04-03 84 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