深入理解跨域與跨域攻擊CSRF

此文適合瞭解跨域與CSRF攻擊,但又好像似懂非懂的童鞋閱讀,對於沒有了解過跨域或者跨域攻擊的童鞋可以先去了解跨域跟CSRF 再回來看

先看問題
1:爲何瀏覽器要有同源策略,限制跨域?
2:同源策略有什麼限制?
3:瀏覽器既然有同源策略,爲何還允許JSONP 或者COSF解決跨域?
4:瀏覽器已經限制跨域爲何還會有csrf?
5:scrf防禦核心思想是啥?

1:爲何瀏覽器要有同源策略,限制跨域?

答1:瀏覽器沒有同源策略 那csrf攻擊將會輕而易舉,網站cookie隨手可取,任何網站將變得不安全
eg:用戶登錄完銀行網站,這時去訪問其他網站,其他網站可以直接僞造請求將用戶的銀行錢轉走;(如果沒有同源策略這時會自動攜帶用戶剛剛登錄銀行cookie)

2:同源策略有什麼限制?
答2:瀏覽器同源策略主要限制:
a:跨域不允許ajax 訪問後的後續操作,直接報跨域錯誤No ‘Access-Control-Allow-Origin’ header is present on the requested resource (這裏請求是已經發出去的,就是說服務器是有收到請求,只是瀏覽器限制獲得請求後的操作,不允許處理跨域數據)

b:跨域不允許攜帶cookie,不管是標籤< scrip> 方式還是 ajax 請求方式 都是不允許攜帶cookie的,上面的ajax服務器是可以收到請求,但是是沒有任何cookie的

c:< img>標籤跨域請求圖片會污染canvas,不允許canvas 輸出,常用 html2canvas 一款html轉圖片的插件,原html裏的圖片跨域則最終生成圖片會失敗

3:瀏覽器既然有同源策略,爲何還允許JSONP 或者COSF解決跨域?
答3:JSONP 或者COSF解決跨域 都需要後端配合,並且COSF 只有後臺配置白名單才能使用cookie,不能使用cookie 是不能造成跨域攻擊,通過這樣的方式將網站是否能跨域,哪些域能跨交給各自網站去判斷(比如銀行網站只要不設置COSF請求頭頭是不能被跨域的)

4:瀏覽器已經限制跨域爲何還會有csrf?
答4:上面已經說到瀏覽器已經限制跨域的cookie使用,這只是針對ajax 或者< scrip>訪問的,下面的情況都可以正常使用cookie(Cookie 的 SameSite 屬性 爲默認情況下,具體可以看此屬性對跨域限制)
a:直接通過windo.location.href=xxx 重定向跨域
b: 通過< form> 表單跨域提交 ,不論post 或者get
c:通過< ifram> 打開跨域連接

所以同源策略沒有完全限制跨域攻擊的可能,要完全限制只能要求網頁不能跳外鏈或者任何外鏈都不能帶cookie,這樣做成本會很重會嚴重影響網站功能開發

5:scrf防禦核心思想是啥?
答5:跨域攻擊防禦(簡單的說就是怎麼判斷訪問是從自己的網站或者app 發出的)核心思想:判斷髮出請求的網站來源;
主要實現如下:
a:驗證HTTP Referer
HTTP Referer 即是打開當下鏈接的頁面的域名(網頁是從哪個頁面鏈接過來的);
跨域攻擊只能直接跳轉或者 < form>提交,正常情況是不能僞造Referer的 服務端只要獲取到Referer 校驗是否合法鏈接即可,當然這是不能百分百保證的,Referer 的值是由瀏覽器提供的,雖然 HTTP 協議上有明確的要求,但是每個瀏覽器對於 Referer 的具體實現可能有差別,並不能保證瀏覽器自身沒有安全漏洞

b:通過自定義token
網站每次進入一個頁面都必須由後端生成一個token 通過預編譯(php 模板) 或者請求頭方式傳給前端,前端每次請求都要帶上上一次請求的返回的token,token 可由後端加密,這個有點像 referer 只是這個referer 是我們自己定義的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章