關於跨域限制,僅僅是瀏覽器的行爲,和服務端無關

前段時間寫了個先後端分離的項目,先後端都是我一我的完成,通訊都是經過接口進行的,這時候就要面對接口安全的問題,api沒法使用laravel框架提供的csrf-token等安全措施,我只作了個簡單的基於session的驗證。個人全部api都是經過ajax來進行的,心想既然有跨域限制,不容許跨域的話是否是就萬事大吉了呢?跨域限制僅僅是瀏覽器的行爲嗎?服務器有跨域限制嗎?html

(此處有誤,可使用csrf-token,可是在發起post請求前必須獲取到cookie中的token,將其加入header中,能夠加在單頁的入口html裏,或者來一次get請求)laravel

若是隻是瀏覽器的行爲,那麼就能輕鬆繞過了,沒有意義。web

帶着這個問題查了一些資料,講同源策略的不少,不少地方都說這是web安全的基石,可是沒看到哪裏明確的提到這只是瀏覽器的行爲,和服務端、http沒有關係。ajax

因而本身作個實驗咯,實驗步驟以下:後端

  1. 在阿里雲服務器上用beego起一個後端應用,弄一個test接口,不設置Access-Control-Allow-Origin
  2. 服務器上寫一個靜態頁面,有個按鈕點擊發送ajax請求test接口
  3. 本地弄一個一樣的頁面
  4. 本地弄一個代理服務器,轉發test至阿里雲服務器
  5. 分別進行以下測試:api

    • 線上頁面在瀏覽器中發請求到線上服務器
    • 本地頁面在瀏覽器中發請求到線上服務器
    • 修改allow-origin爲*,本地頁面在瀏覽器中發請求到線上服務器
    • 不設置allow-origin,本地頁面在瀏覽器中經過代理服務器請求接口
    • 不設置allow-origin,使用postman等工具請求接口

測試結果:除了第二種狀況,其餘的均能進行跨域請求,結論就是跨域限制僅僅是瀏覽器的行爲,經過代理服務器,或者其餘工具發送請求就能輕鬆繞過。跨域

那麼,同源策略是否是沒有什麼卵用呢?
錯,同源策略是web安全的基石,固然很重要了瀏覽器

由於:安全

隨着互聯網的發展,"同源政策"愈來愈嚴格。目前,若是非同源,共有三種行爲受到限制。
(1) Cookie、LocalStorage 和 IndexDB 沒法讀取。
(2) DOM 沒法得到。
(3) AJAX 請求不能發送。

若是在其餘域名能讀qq.com的cookie那就至關於它能拿到登錄權限服務器

reference:
瀏覽器同源政策及其規避方法-阮一峯
瀏覽器的同源策略-mdn

相關文章
相關標籤/搜索