簡體   English   中英

使用Django使用Javascript生成CSRF令牌

[英]CSRF Token Generation in Javascript with Django

我正在使用Django后端創建Web應用程序,但是大部分繁重的工作將由Javascript完成。 我一直在和一些同事討論使用JavaScript而不是Django template tag生成CSRF令牌是否安全。

從我到目前為止所做的研究來看, Django似乎只是將 CSRF_COOKIE設置的值與csrfmiddlewaretoken表單字段中提交的值進行了csrfmiddlewaretoken

生成隨機的32個字符串並使用javascript設置表單字段值和cookie是否不安全?

本質上,您提議的是Double Submit Cookies CSRF預防方法的一種變體。 之所以可行,是因為攻擊者無法在您的域的瀏覽器中讀取或寫入Cookie值,因此無法復制要與表單一起提交的相同值。

當用戶對網站進行身份驗證時,該網站應生成(加密強度高)偽隨機值

這是JavaScript方法的最大問題-JavaScript中的隨機數生成器不是加密安全的。 您可以在這里嘗試一種解決方案 -您的里程可能因瀏覽器而異。 捕獲鼠標的移動聽起來很有趣,但是使用這種方法時必須格外小心-您必須防止在未檢測到任何形式的情況下提交任何形式,因為在實際CSRF攻擊中可能就是這種情況。 如果可能的話,請避免使用安全性之類的東西,最好使事情簡單化-復雜性是安全性的大敵。

我真的很喜歡SilverlightFox的解釋,但我想我會添加一些評論。 您的服務器已經參與了至少第一個請求。 借此機會從模板中設置一個javascript變量,然后繼續在頁面的生命周期中使用它。

{% extends 'base.html' %}

<script>
    window.csrf_token = "{% csrftoken %}";
</script>

它避免了在客戶端生成令牌的復雜性,但仍允許您將令牌用於動態創建的任何表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM