我想通過一個JavaScript(而不是jQuery)的AJAX函數提交的窗體中傳遞一個CSRF令牌。接受的看法似乎是將該標記作爲實際形式的隱藏輸入。正如我所看到的那樣,問題在於使用瀏覽器檢查工具可以很容易地看到隱藏輸入的內容。那麼有沒有更安全的方式來傳遞令牌?傳遞一個CSRF令牌
0
A
回答
1
這不是一個問題,CSRF令牌在源代碼中是可訪問的,因爲它並不意味着隱藏在客戶端瀏覽器中。當我在這裏說「隱藏」時,我並不是在談論HTML表單的「隱藏」屬性,而是通過分析頁面源代碼,腳本執行或網絡流量(真正隱藏)來揭示令牌。
您必須理解CSRF令牌爲何有用。如果攻擊者創建了一個惡意網頁,託管在外部域名下,POST或GET到您的網站,那麼他可以期待經過身份驗證的用戶(受害者 - 在cookie中具有開放會話和會話ID)執行POST/GET:受害者的瀏覽器將檢測目標URL,將Cookie /會話ID添加到GET/POST標頭,並代表經過身份驗證的用戶執行操作(例如:「銷燬我的帳戶」)。
如果您在源中創建了一個隨機的CSRF令牌,攻擊者無法讀取它(因爲他無法代表受害者的瀏覽器加載頁面並感謝其內容,因爲跨域內容隔離),因此無法構建一個會執行GET或POST的惡意頁面。
至於其他方法,其他網站使用唯一的靜態CSRF令牌(在會話init中爲每個用戶生成),它保存在cookie中並通過JS包含在站點的表單中。結果是一樣的,令牌將成爲表單提交的一部分(並且客戶端瀏覽器可以訪問)。您只需避免爲每個表單生成CSRF令牌,並且服務器可以輕鬆地將令牌與客戶端的會話數據進行比較,而不是執行側向通道令牌管理。
相關問題
- 1. 如何通過RestFemplate傳遞CSRF令牌
- 2. httplib - CSRF令牌
- 3. 笨,CSRF令牌
- 4. csrf令牌dajaxice
- 5. csrf令牌使用
- 6. CSRF令牌生成
- 7. Laravel behat CSRF令牌
- 8. 避免CSRF令牌
- 9. 瞭解CSRF令牌
- 10. csrf令牌跟進
- 11. Flask-Security CSRF令牌
- 12. CSRF同步令牌
- 13. Django的CSRF令牌
- 14. CSRF令牌驗證
- 15. 變化CSRF令牌
- 16. 將Node.js中的CSRF令牌傳遞給Django
- 17. 將csrf令牌傳遞給客戶端應用程序
- 18. 在我無法傳遞CSRF令牌答案jQuery的
- 19. 如何在rails應用程序之間傳遞CSRF令牌
- 20. CSRF令牌傳遞中斷我的Django視圖
- 21. 在Alamofire請求參數中傳遞CSRF令牌
- 22. 通過單元格上的jqgrid傳遞csrf令牌
- 23. CSRF 403禁止 - 無效的CSRF令牌
- 24. Symfony2 CSRF令牌無效
- 25. 爲window.location.href添加CSRF令牌
- 26. Braintree CSRF令牌丟失
- 27. laravel CSRF令牌與枝條
- 28. 的CSRF令牌無效
- 29. csrf令牌,安全問題?
- 30. 如何驗證CSRF令牌?
我正在構建的應用程序實際上在其自己的頁面上有多個表單。每次加載其中一個表單時,我都會設想生成一個新的CSRF標記,而不是使用靜態標記。 – bob
爲了簡單和可維護性,我會採用其他方式。我知道在cookie中存儲CSRF令牌的銀行級平臺,並在所有表單上重複使用。如果CSRF每次都改變,那麼在安全性方面就沒有真正的附加價值,因爲如果泄露一次就意味着整個用戶會話被泄露,那麼使CSRF成爲問題最少的問題。但最終,如果自動化足夠,兩者都是可行的解決方案。 – Fabien
好點 - thanx – bob