跨域限制僅僅是瀏覽器的行為嗎?


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

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

如果只是瀏覽器的行為,那么就能輕松繞過了,沒有意義。

帶着這個問題查了一些資料,講同源策略的很多,很多地方都說這是web安全的基石,但是沒看到哪里明確的提到這只是瀏覽器的行為,和服務端、http沒有關系。

於是自己做個實驗咯,實驗步驟如下:

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

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

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

那么,同源策略是不是沒有什么卵用呢?
錯,同源策略是web安全的基石,當然很重要了

因為:

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

如果在其他域名能讀qq.com的cookie那就相當於它能拿到登陸權限

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM