我正在開發一個應該非常安全的java web應用程序,因此我在SSL服務器上啓用了CSRF的spring security和spring MVC;我使用POST提交所有表單,併成功提交生成的CSRF令牌,但是有些頁面具有GET方法,如果有攻擊者從任何瀏覽器打開任何頁面的源代碼,他可以在Form標記中看到生成的CSRF令牌,那麼他可以使用它會發布任何內容到我們的網站,只要該會話在用戶攻擊下處於活動狀態!我對嗎?Spring Security和CSRF攻擊
我該做什麼使網站非常安全?我是否應該使用其他任何開源軟件以及Spring安全套件來支持其他攻擊,如跨站點腳本等。我應該強制所有頁面使用POST來避免任何CSRF攻擊?
UPDATE
我試圖爲登錄用戶提交通過使用同樣的道理相同會話下相同的瀏覽器客戶端工具的要求做更多的測試,但它失敗,則迴應稱登錄失敗,和報頭包含nosniff
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
所以我覺得它使用GET春季安全處理CSRF不害怕從某一個讀取GET頁面的標記,除非攻擊者使用XSS攻擊做提交安全
如果攻擊者在受害者會話處於打開狀態時(例如,顯示讀取某些GET頁面的Ad)的腳本來讀取GET頁面,他可以讀取該頁面的敏感數據,並且可以在該內部的任何POST動作內竊取該令牌頁面並用它來執行POST操作。 –
@HanySakr,是的,但是如果攻擊者可以發佈腳本,那麼CSRF是他腦海中最後一件事情之一。在這種情況下,他會做更多其他更嚴肅和直接的事情,例如放棄[JavaScript關鍵記錄器](https://wiremask.eu/articles/xss-keylogger-turorial/)來竊取用戶密碼。可以這樣思考:CSRF以逐個用戶爲基礎工作,但跨站點腳本一次攻擊許多用戶。跨站點腳本比CSRF更危險。 – TheGreatContini
感謝您的回覆。實際上,我需要關閉任何攻擊的大門,我已經處理了跨站點腳本,並且在想如果我可以將所有頁面更改爲POST,而不是GET,它將完全覆蓋CSRF,並且不會允許任何人猜測生成的令牌。 我看到了一個解決方案,可以爲HDiv等每個頁面生成標記,但是我不知道它是否與彈簧安全性集成在一起? –