我對網絡安全非常陌生,當我閱讀更多有關不同攻擊媒介的信息時,我的想法很容易讓他們首先被允許。這就像網絡被設計成具有破壞性的安全模式並且容易受到攻擊。爲什麼瀏覽器允許CSRF?
我也很驚訝於模糊和不準確的信息量。例如,起初單原產地政策聽起來不錯,然後我讀到它只適用於XHR,哦順便說一句,實際上並沒有阻止XHR交叉源POST,這是傳統的CSRF攻擊。很高興我一直在閱讀。
還有一個Origin頭文件,服務器可以使用它來確保請求來自正確的位置 - 但是oops,它在不同瀏覽器中設置不一致,如果未設置,則不能相當肯定,如果這是因爲一個相同的來源請求,或者只是沒有得到它的某些瀏覽器(可能是一個IMG標籤?)的請求類型。繼續閱讀。
所以權利似乎是在會話cookie中設置一個CSRF令牌,並將該令牌添加到窗體/鏈接,然後在提交時將它們與服務器端進行比較。在理論上(並且爲了這個問題可以排除所有XSS攻擊),另一個選項卡的CSRF嘗試可能會向包含該cookie的表單發出POST請求,但沒有將表單輸入元素設置爲匹配的令牌(因爲它無法從cookie中讀取令牌),因此服務器將拒絕該請求。工作但kludgy,並確保你永遠不會忘記檢查!
爲了保持這一想法在第二秒,這裏是我的問題 - 爲什麼瀏覽器發送會話cookie在一個請求中發出的頁面不是來源的cookie?
我的意思是,瀏覽器將拒絕發送cookie 到不同的領域有很好的理由,但很樂意從不同來源給他們?如果他們不這樣做會破壞嗎?它是否會成爲CSRF的強大防禦,只需要服務器去做他們正在做的事情 - 檢查有效的會話cookie?
編輯:也許這是一個嘗試改善情況? https://tools.ietf.org/html/draft-west-origin-cookies-01
很多東西都會打破。例如所有這些分析和廣告腳本。 – Thilo
從第一天開始,瀏覽器就不是設計成允許* CSRF發生的。稍後,CSRF被發現*,此時已經有很多網站已經存在。絕對超過十個。事後更改規則,並期望每個網站改變,以適應規則的變化,預計很多 - 尤其是當一大堆*跨站點請求可能有*無*有害影響,只有理想的。 –
這是有點不相干。網站負責保護自己,而不是依賴「正確」設計/開發/維護的瀏覽器。這就是爲什麼CSRF令牌(即使是kludgy)是必要的。我建議將CSRF構建到網站架構中(或使用已有的框架)。這樣,它總是在那裏,並總是檢查(假設你正確地使用框架;) – LaJmOn