HTTP同源策略

同源策略是web安全策略中的一種,非常重要。
同源策略明確規定:不同域的客戶端在沒有明確授權的情況下,不能讀寫對方的資源。
簡單說來就是web瀏覽器允許第一個頁面的腳本訪問訪問第二個頁面的數據,但是也只有在兩個頁面有相同的源的時候,如果不同源則需要授權。源:URI(統一資源標識符)、主機名、端口號組合而成的。這個策略可以阻止一個頁面上惡意腳本通過頁面DOM對象獲得訪問另一個頁面的敏感信息的權限。

歷史

同源策略的概念要追溯到1995年的網景瀏覽器。同源策略作為一個重要的安全基石,所有的現代瀏覽器都在一定程度上實現了同源策略。同源策略雖然不是一個明確規范,但是經常為某些web技術(例如Microsoft Silverlight,Adobe Flash,Adobe Acrobat)或者某些機制(例如XMLHttpRequest)擴展定義大致兼容的安全邊界。

源決定規則

RFC6454中有定義URI源的算法定義。對于絕對的URIs,源就是{協議,域名,端口}定義的。只有這些值完全一樣才認為兩個資源是同源的。如http://www.example.com:80/dir/page.html

http:// 協議
www.example.com 域名
:80 端口號

舉個栗子:比較表格中的URL與”http://www.example.com/dir/page.html“是否同域。

對比URL結果結果分析
http://www.example.com/dir/page2.html同源相同的協議、域名、端口號
http://www.example.com/dir2/other.html同源相同的協議、域名、端口號
http://username:password@www.example.com/dir2/other.html同源相同的協議、域名、端口號
http://www.example.com:81/dir/other.html不同源相同的協議、域名;不同的端口號
https://www.example.com/dir/other.html不同源相同的域名、端口號;不同的協議
http://en.example.com/dir/other.html不同源相同的協議、端口號;不同的域名
http://example.com/dir/other.html不同源不同的域名(需要精確匹配)
http://v2.www.example.com/dir/other.html不同源不同的域名(需要精確匹配)
http://www.example.com:80/dir/other.html看情況端口明確,需要依賴于瀏覽器的實現

不像其他瀏覽器,IE在計算源的時候沒有包括端口。

限制的范圍

隨著互聯網的發展,”同源政策”越來越嚴格。目前,如果非同源,共有三種行為受到限制。

  1. Cookie、LocalStorage 和 IndexDB 無法讀取。
  2. DOM 無法獲得。
  3. AJAX 請求不能發送。

    雖然這些限制是必要的,但是有時很不方便,合理的用途也受到影響。

授權

默認情況下訪問一個站點是不允許跨越的,只有目標站點(比如:http://www.example.com/dir/page.html)明確返回HTTP響應頭Access-Control-Allow-Origin: http://www.evil.com 那么www.evil.com站點上的客戶端腳本就有權通過AJAX技術對www.foo.com上的數據進行讀寫操作。

讀寫權限

Web上的資源有很多,有的只有讀權限,有的同時擁有讀和寫的權限。比如:HTTP請求頭里的Referer(表示請求來源)只可讀,而document.cookie則具備讀寫權限。這樣的區分也是為了安全上的考慮。

安全的考量

有這種限制的主要原因是因為如果沒有同源策略將導致安全風險。假設用戶在訪問銀行網站,并且沒有登出。然后他又去了任意的其他網站,剛好這個網站有惡意的js代碼,在后臺請求銀行網站的信息。因為用戶目前仍然是銀行站點的登陸狀態,那么惡意代碼就可以在銀行站點做任意事情。例如,獲取你的最近交易記錄,創建一個新的交易等等。因為瀏覽器可以發送接收銀行站點的session cookies,在銀行站點域上。訪問惡意站點的用戶希望他訪問的站點沒有權限訪問銀行站點的cookie。當然確實是這樣的,js不能直接獲取銀行站點的session cookie,但是他仍然可以向銀行站點發送接收附帶銀行站點session cookie的請求,本質上就像一個正常用戶訪問銀行站點一樣。關于發送的新交易,甚至銀行站點的CSRF(跨站請求偽造)防護都無能無力,因為腳本可以輕易的實現正常用戶一樣的行為。所以如果你需要session或者需要登陸時,所有網站都面臨這個問題。如果上例中的銀行站點只提供公開數據,你就不能觸發任意東西,這樣的就不會有危險了,這些就是同源策略防護的。當然,如果兩個站點是同一個組織的或者彼此互相信任,那么就沒有這種危險了。

規避同源策略

在某些情況下同源策略太嚴格了,給擁有多個子域的大型網站帶來問題。下面簡要介紹解決這種問題的技術:

document.domain屬性

如果兩個window或者frames包含的腳本可以把domain設置成一樣的值,那么就可以規避同源策略,每個window之間可以互相溝通。例如,orders.example.com下頁面的腳本和catalog.example.com下頁面的腳本可以設置他們的document.domain屬性為example.com,從而讓這兩個站點下面的文檔看起來像在同源下,然后就可以讓每個文檔讀取另一個文檔的屬性。

跨域資源共享

這種方式即上文所說的授權,使用了一個新的Origin請求頭和一個新的Access-Control-Allow-Origin響應頭擴展了HTTP。允許服務端設置Access-Control-Allow-Origin頭標識哪些站點可以請求文件,或者設置Access-Control-Allow-Origin頭為”*”,允許任意站點訪問文件。

跨文檔通信

這種方式允許一個頁面的腳本發送文本信息到另一個頁面的腳本中,不管腳本是否跨域。在一個window對象上調用postMessage()會異步的觸發window上的onmessage事件,然后觸發定義好的事件處理方法。一個頁面上的腳本仍然不能直接訪問另外一個頁面上的方法或者變量,但是他們可以安全的通過消息傳遞技術交流。

JSONP

JOSNP允許頁面接受另一個域的JSON數據,通過在頁面增加一個可以從其它域加載帶有回調的JSON響應的<script>標簽。

WebSocket

現代瀏覽器允許腳本直連一個WebSocket地址而不管同源策略。然而,使用WebSocket URI的時候,在請求中插入Origin頭就可以標識腳本請求的源。為了確保跨站安全,

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249682.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249682.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249682.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Cloud 微服務架構

一、分布式服務框架的發展 1.1 第一代服務框架   代表&#xff1a;Dubbo(Java)、Orleans(.Net)等 特點&#xff1a;和語言綁定緊密 1.2 第二代服務框架   代表&#xff1a;Spring Cloud等 現狀&#xff1a;適合混合式開發&#xff08;例如借助Steeltoe OSS可以讓ASP.Ne…

JZOJ 4421. aplusb

4421. aplusb Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Goto ProblemSetDescription SillyHook要給小朋友出題了&#xff0c;他想&#xff0c;對于初學者&#xff0c;第一題肯定是ab 啊&#xff0c;但當他出完數據后神奇地發現.in不見了&#xff0c…

跨域資源共享CORS詳解

最近深入了解了CORS的相關東西&#xff0c;覺得阮一峰老師的文章寫得最詳細易懂了&#xff0c;所有轉載作為學習筆記。 原文地址&#xff1a;跨域資源共享 CORS 詳解 CORS是W3C的一個標準&#xff0c;全稱是跨域資源共享&#xff08;Cross-origin resource sharing&#xff0…

計算機網絡(十),HTTP的關鍵問題

目錄 1.在瀏覽器地址欄鍵入URL&#xff0c;按下回車之后經歷的流程 2.HTTP狀態碼 3.GET請求和POST請求的區別 4.Cookie和Session的區別 5.IPV4和IPV6 十、HTTP的關鍵問題 1.在瀏覽器地址欄鍵入URL&#xff0c;按下回車之后經歷的流程 &#xff08;1&#xff09;DNS解析 &#x…

云技術

云技術是指在廣域網或局域網內將硬件、軟件、網絡等系列資源統一起來&#xff0c;實現數據的計算、儲存、處理和共享的一種托管技術。

vue中 mock使用教程

//mock/index.js import Mock from mockjs //引入mockjs&#xff0c;npm已安裝 import { Random,toJSONSchema } from mockjs // 引入random對象,隨機生成數據的對象&#xff0c;&#xff08;與占位符一樣&#xff09; Mock.setup({timeout:1000 //設置請求延時時間 }) const …

前端開發掌握nginx常用功能之rewrite

上一篇博文對nginx最常用功能的server及location的匹配規則進行了講解&#xff0c;這也是nginx實現控制訪問和反向代理的基礎。掌握請求的匹配規則算是對nginx有了入門&#xff0c;但是這些往往還是不能滿足實際的需求場景&#xff0c;例如請求url重寫、重定向等等&#xff0c;…

vue2.0腳手架的webpack 配置文件分析

前言 作為 Vue 的使用者我們對于 vue-cli 都很熟悉&#xff0c;但是對它的 webpack 配置我們可能關注甚少&#xff0c;今天我們為大家帶來 vue-cli#2.0 的 webpack 配置分析 vue-cli 的簡介、安裝我們不在這里贅述&#xff0c;對它還不熟悉的同學可以直接訪問 vue-cli 查看 …

一個可供中小團隊參考的微服務架構技術棧

一個可供中小團隊參考的微服務架構技術棧

WinSxS文件夾瘦身

WinSxS文件夾瘦身2014-5-8 18:03:32來源&#xff1a;IT之家作者&#xff1a;阿象責編&#xff1a;阿象 評論&#xff1a;27剛剛&#xff0c;我們分享了如何用DISM管理工具查看Win8.1 WinSxS文件夾實際大小。對于WinSxS文件夾&#xff0c;幾乎每個Windows愛好者都認識到其重要性…

bcrypt的簡單使用

前段時間在搗鼓個人項目的時候用到了nodejs做服務端&#xff0c;發現使用加密的方法和之前常用的加密方式不太一致&#xff0c;下面以demo的形式總結一下bcrypt對密碼進行加密的方法。 一、簡介 Bcrypt簡介&#xff1a; bcrypt是一種跨平臺的文件加密工具。bcrypt 使用的是布…

盒子居中

1、未脫標 margin&#xff1a;0 auto&#xff1b; 2、脫標&#xff08;absolute、fixed&#xff09; left&#xff1a;50%&#xff1b; margin-left&#xff1a;width/2&#xff1b; 轉載于:https://www.cnblogs.com/liujianing/p/10356984.html

織夢無子欄目時禁止調用同級欄目

1. 修改文件 \include\taglib\channel.lib.php 把代碼 if($typeson && $reid!0 && $totalRow0) 改為 if($typeson && $reid!0 && $totalRow0 && $noself) 2. 使用channel標簽時添加noself屬性 {dede:channel noselfyes} {/dede:channe…

nodejs實現文件上傳

前段時間在做個人項目的時候&#xff0c;用到了nodejs服務端上傳文件&#xff0c;現在回頭把這個小結一下&#xff0c;作為記錄。 本人上傳文件時是基于express的multiparty&#xff0c;當然也可以使用connect-multiparty中間件實現&#xff0c;但官方似乎不推薦使用connect-m…

python騰訊語音合成

一、騰訊語音合成介紹 騰訊云語音合成技術&#xff08;TTS&#xff09;可以將任意文本轉化為語音&#xff0c;實現讓機器和應用張口說話。 騰訊TTS技術可以應用到很多場景&#xff0c;比如&#xff0c;移動APP語音播報新聞&#xff1b;智能設備語音提醒&#xff1b;依靠網上現有…

鉤子函數和回調函數的區別

一般認為&#xff0c;鉤子函數就是回調函數的一種&#xff0c;其實還是有差異的&#xff0c;差異地方就是&#xff1a;觸發的時機不同。 先說鉤子函數&#xff1a; 鉤子&#xff08;Hook&#xff09;概念源于Windows的消息處理機制&#xff0c;通過設置鉤子&#xff0c;應用程…

【bzoj4712】洪水

Portal --> bzoj4712 Description 給你一棵樹&#xff0c;節點從\(1\)到\(n\)編號&#xff0c;每個節點有一個權值&#xff0c;有若干次操作&#xff0c;操作有以下兩種&#xff1a; \((C,x,delta)\)&#xff1a;將編號為\(x\)的點的權值改為\(delta\) \((Q,x)\)&#xff1a…

[USACO]地震 (二分答案+最優比率生成樹詳解)

題面&#xff1a;[USACO 2001 OPEN]地震 題目描述&#xff1a; 一場地震把約翰家的牧場摧毀了&#xff0c; 堅強的約翰決心重建家園。 約翰已經重建了N個牧場&#xff0c;現在他希望能修建一些道路把它們連接起來。研究地形之后&#xff0c;約翰發現可供修建的道路有M條。碰巧的…

HTTP協議學習筆記

1.HTTP協議簡介 &#xff08;1&#xff09;客戶端連上web服務器后&#xff0c;若想獲得web服務器中的某個web資源&#xff0c;需遵守一定的通訊格式&#xff0c;HTTP協議用于定義客戶端與web服務器通迅的格式。 &#xff08;2&#xff09;HTTP是hypertext transfer protocol&…