跳到主要內容

Web安全 - 同源政策(Same Origin Policy)

互聯網的時代中我們幾乎都離不開網路,那如果能夠對於Web具備基礎的知識,就能夠讓我們在使用網路的過程中提升風險意識,以減少被竊取、盜用的風險,進而保護個人資產,因此多一份知識在身上也就等於多了一份防身的武器,一天學一點,建立習慣讓我們享受知識複利的效應。

這也是第一篇在PotatoMedia撰寫的Web知識篇章,主軸在介紹我們常常接觸的瀏覽器中具有哪些機制? 而這些機制中可能存在著哪些弱點可能被攻擊,進而導致個人資訊被竊取,並說明如何注意與防範,期望這些知識能夠幫助到你我,免於遭受不必要的損害。



Same-Origin Policy 同源政策是Web Security中安全建立的基礎,用來限制不同網域之間的資源存取權,而這邊指的資源包括程式碼、圖片、影片、html...等。

Same-Origin Policy 主要目的在劃清界限,試想兩個國家之間,基於安全考量,通常不會共享重要資源(軍備、財務...等)吧! 而Same-Origin Policy就是在制定這樣的政策,讓自己的網站自己管,試想,若自己的網站允許被其他網站存取,那麼在你的網站中的重要資訊也很容易被竊取,甚至鑽研漏洞,導致被攻擊,道理就跟國與國之間一樣,必須形成壁壘,保護重要資產。



像這樣的畫面,我們進行網頁開發時是不是常常看到這種狀況? 這就是不同源存取的其中一個例子。



🔔還沒成為Potato會員的朋友點這裡加入哦,撰寫文章還能挖礦打造被動收入 🔔

什麼是同源? 又該如何判定?

同源(Origin)主要由以下三個部分組成:



  • Schema: URL的最初始位置,也就是:// 之前的字段,也就是httphttps...等協定。
  • Hostname(Domain): 這裡指的就是full domain name。
  • Port: domain name後面接的port, 我們有時候沒有看到port號是因為http預設80 port而https預設為443 port。

上述三個部分只要有其中一個不相符,就屬於不同源,以下用簡單的例子來看看哪些同源,哪些又是不同源?

❓ <https://www.domain1.com>
================================================================================
✅ <https://www.domain1.com/dir1/1.html>
✅ <https://www.domain1.com/dir1/inner/1.html>
❌ <http://www.domain1.com>        -> Schema不同
❌ <https://www.hack.com>          -> Hostname不同
❌ <https://www.domain1.com:31217> -> Port不同

哪些又是同源的例外?

開發Web應用的過程中,我們常常會嵌入其他網站的圖片、內嵌網頁、影片...等,但問題來了,為什麼這些資源能夠順利的被嵌入呢? 沒錯,事情總有些例外!在某些情況下,跨源是被允許的,如下:

  • 跨來源寫(Cross-origin writes): 連結、重新導向、表單送出。
  • 跨來源嵌入(Cross-origin embedding): <script src=”xxx”>、 <img>、<video>、<iframe>...等嵌入語法。

關於Cookie存取的同源政策

什麼是Cookie呢? 簡單來說就像一張通行證的概念,裡面存有你這個人的識別號碼, 因此通常是認卡不認人,因此很容易發生非本人但拿著識別卡片一樣能進入的狀況。

為什麼會如此呢? 這就得先了解一下Cookie的同源政策,對於Cookie的檢查來說,只要Hostname(Domain)與Path一樣,就會被視為同源,若Cookie有加上一些特別的設定才需要多判斷Schema的部分。

而Cookie的子網域與母網域是共用的,因此有心人士可以在這樣的共用制度下,透過子網域去攻擊母網域,導致安全性議題,後續會談到CSRF,看完之後就能呼籲這篇的概念了。

結語

同源政策的概念非常好,完美的形成壁壘,但總不可能為了完全阻絕攻擊而封閉整個國家吧! 並不是每個想要存取網站的其他來源都是惡意的,而我們有時候也需要串接一些第三方的資源,套用到國與國之間就是邦交國的概念,總會需要一些適度的開放,那開放的同時也需要有一些名單上的限制,另外會衍生哪些安全性議題? 請參考以下的章節預告。

章節預告

  • 跨來源資源共用(CORS)。
  • Web的安全隱憂CSRF(Cross-site request forgery)。
  • 跨網站腳本 (Cross-Site Scripting, XSS)。
  • 開放白名單 - Content Security Policy (CSP)。

🔔還沒成為Potato會員的朋友點這裡加入哦,撰寫文章還能挖礦打造被動收入 🔔

資源參考


留言

這個網誌中的熱門文章

java西元民國轉換_各種不同格式

C#資料庫操作(新增、修改、刪除、查詢)

【Excel好好玩】 自己的資產自己管!善用Google Sheet來幫我們評估貸款

這次介紹的主題是關於Excel的貸款還款計畫試算,我們人生中總會遇到需要大筆金額的花費,但當資金不夠時就得進行貸款,而貸款之前如果我們能夠審慎評估,並分析自己的還款能力之後在進行凍作,相信風險會小很多,因此就自己動動手來使用Google Sheet進行試算吧! 基本資料 ● 貸款總額: 1000000 ● 貸款期數: 84月 ● 年利率: 2.11% ● 月利率: 0.18% P.S 月利率 = 年利率 / 12 重要函式 PMT : 這是Google Sheet內建的重要年金計算公式,我們可以善用這個公式來計算固定利率及期數的固定攤還本息。因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 動手做 首先我們在Excel表上列出我們的基本資料 圖片來源 其中月利率的部分就使用公式「=B4/12」 接著我們填上第一列的期數跟餘額 圖片來源 =B2 =B3 使用關鍵PMT函數來計算本息的部分 因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 -PMT(貸款利率(月利率), 貸款期數, 貸款總額) =-PMT($B$5,$B$3,$B$2) 圖片來源 計算利息 利息 = 貸款餘額 x 月利率 =B8*$B$5 圖片來源 計算本金 本金 = 本息 - 利息 =C8-D8 圖片來源 製作第二列餘額的部分 餘額的部分 = 上一期的餘額 - 上一期的本金 圖片來源 接著拖曳該兩列往下拉,即可查看每一期的利息與本金 圖片來源 結語 雖然市面上已經有很多貸款銀行都提供了試算功能,但如果我們想要進一步管理自己的資產時,就需要將每一期的金額給計算出來,因此才會將公式運用在Excel表,讓我們的資產管理表能夠結合負債,進一步評估我們理財行動的下一步,希望這樣的經驗可以幫助到正在理財道路上打拼的夥伴,讓我們透過有效的管理,幫助荷包長大吧! 喜歡撰寫文章的你,不妨來了解一下: Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入? 歡迎加入一起練習寫作,賺取知識,累積財富!