2015-11-28 62 views
0

我正在使用Spring-MVC和AngularJS創建我的Web應用程序,但我想這個問題可以應用於任何技術,因爲它更像是一個概念性問題,而不是一個特定的技術問題。REST /無狀態:CSRF攻擊和記住登錄用戶

我在理解關於CSRF攻擊的一些事情以及在我的web應用程序上驗證用戶方面掙扎。因此,我有以下問題:

  • 對於CSRF攻擊,我讀this網站,聲明如下:

有客戶端生成,並在既有的Cookie發送相同的唯一祕密值和一個自定義的HTTP頭。考慮到網站只允許爲自己的域讀取/寫入Cookie,只有真正的網站可以在兩個標頭中發送相同的值。使用這種方法,您的服務器所要做的就是檢查兩個值是否相等,無狀態每個請求的基礎上!

現在,我不明白生成這些祕密值的目的是什麼。我的意思是,擁有這兩個祕密值並在服務器上比較它們的目的是什麼?攻擊者不能只將2個相同的值放入假cookie和http頭中,並仍然提交表單?

  • 從我的理解來看,REST是無狀態的,因此服務器不會跟蹤服務器上的任何會話。在這種情況下,我假設用戶應該再次傳遞每個請求的祕密值,讓服務器現在是他?但服務器應該如何處理這個祕密值?它應該保存在數據庫中嗎?

回答

1

現在,我不明白生成這些祕密值的目的是什麼。我的意思是,擁有這兩個祕密值並在服務器上比較它們的目的是什麼?攻擊者不能只將2個相同的值放入假cookie和http頭中,並仍然提交表單?

你是對的,攻擊者可以添加一個HTTP頭,但他只能爲自己的域(origin)設置一個cookie。瀏覽器不會發送cookie到另一個域:

考慮到一個網站只允許讀取/寫入自己的域的Cookie,只有真正的網站可以在兩個頭中發送相同的值。

服務器將只接收來自攻擊者的HTTP請求頭,而不是cookie。

+0

感謝您的評論。但是,如果服務器只檢查它們是否相等,爲什麼這個值很重要? (我假設他可以給http頭和cookie添加一個值?) 如果我有一個web服務,例如,移動設備上的前端應用程序正在與我的Web服務進行通信。在這種情況下,我不能保持同源限制嗎?由於這個前端不在同一臺服務器上? – user3125591

+0

^啊感謝澄清一個。 \t 我對我缺乏理解表示歉意。請隨身攜帶:現在從我的理解中,他從服務器獲得價值? (我認爲這是由前端而不是服務器產生的)。那麼這個值被保存在一個cookie中,在另一個請求到服務器之後發送回來? – user3125591

+0

謝謝!我只是想知道,是否所有瀏覽器都拒絕將cookie發送到其他域?如果你編寫自己的惡意瀏覽器會怎麼樣? – user3125591