摘要:概述同源策略是對(duì)代碼能夠操作哪些內(nèi)容的一條完整的安全限制,也是由提出的一個(gè)著名的安全策略。同源策略的目的同源政策的目的,是為了保證用戶(hù)信息的安全,防止惡意的網(wǎng)站竊取數(shù)據(jù)。
[TOC]
1、概述同源策略是對(duì)JavaScript代碼能夠操作哪些WEB內(nèi)容的一條完整的安全限制,也是由Netscape提出的一個(gè)著名的安全策略。所謂同源簡(jiǎn)單來(lái)說(shuō)就是“三個(gè)相同”,
**
1、域名相同
2、協(xié)議相同
3、端口相同
**
當(dāng)我們使用多個(gè)元素或者打開(kāi)其他瀏覽器窗口的時(shí)候,這一策略就會(huì)發(fā)揮它的作用,在這種情況下,同源策略負(fù)責(zé)管理窗口或者窗體中的JavaScript代碼以及和其他窗口的交互,具體來(lái)說(shuō),腳本只能讀取所屬文檔的來(lái)源相同的窗口和文檔屬性(當(dāng)然我們也可以通過(guò)JS實(shí)現(xiàn)多個(gè)窗口和窗體,在本章我們不做解釋?zhuān)┊?dāng)然同源策略也屬于一些理論性的知識(shí)點(diǎn),存在于我們?nèi)粘5氖褂弥?,了解這些能夠幫助我們更好的理解前端的安全及知識(shí)。
文檔的來(lái)源包含協(xié)議、主機(jī),以及載入文檔的URL端口。
1、從不同的web服務(wù)器載入的文檔具有不同的來(lái)源。
2、通過(guò)同一主機(jī)的不同端口載入的文檔具有不同的來(lái)源。
3、使用http協(xié)議和https協(xié)議載入的文檔具有不同的來(lái)源。
即使他們來(lái)自同一個(gè)服務(wù)器。
腳本本身的來(lái)源與同源策略并不相關(guān),相關(guān)的是腳本所潛入的文檔的來(lái)源,同時(shí)同源策略還會(huì)應(yīng)用于XMLHttpRequest生成的HTTP請(qǐng)求,這個(gè)對(duì)象允許客戶(hù)端javascript生成任意的HTTP請(qǐng)求到腳本所屬文檔的服務(wù)器,但是不允許腳本和其他WEB服務(wù)器之間的通信,這就是我們常說(shuō)的跨域請(qǐng)求,其實(shí)所謂的跨域就是受到了同源策略的約束,(當(dāng)然我們可以通過(guò)其他的方式來(lái)解決跨域之間的請(qǐng)求的問(wèn)題)。
同源政策的目的,是為了保證用戶(hù)信息的安全,防止惡意的網(wǎng)站竊取數(shù)據(jù)。
設(shè)想這樣一種情況:A網(wǎng)站是一家銀行,用戶(hù)登錄以后,又去瀏覽其他網(wǎng)站。如果其他網(wǎng)站可以讀取A網(wǎng)站的 Cookie,會(huì)發(fā)生什么?
很顯然,如果 Cookie 包含隱私(比如存款總額),這些信息就會(huì)泄漏。更可怕的是,Cookie 往往用來(lái)保存用戶(hù)的登錄狀態(tài),如果用戶(hù)沒(méi)有退出登錄,其他網(wǎng)站就可以冒充用戶(hù),為所欲為。因?yàn)闉g覽器同時(shí)還規(guī)定,提交表單不受同源政策的限制。
由此可見(jiàn),"同源政策"是必需的,否則 Cookie 可以共享,互聯(lián)網(wǎng)就毫無(wú)安全可言了。
—— 摘自《瀏覽器同源政策及其規(guī)避方法》
3、文檔中設(shè)置同源:document.domain在某些情況下,同源策略就顯得比較嚴(yán)格了,比如在同一個(gè)域名下的其它子域名,例如兩個(gè)子域名:home.xiang.com和子域名order.xiang.com其中的一個(gè)子域名下需要合法的讀取另一個(gè)子域名地下的文檔的屬性,為了支持這種多域名站點(diǎn),這時(shí)候我們可以使用document.dimin屬性來(lái)控制源,在默認(rèn)情況下document.domain的值是載入文檔的服務(wù)器的主機(jī)名,當(dāng)我們?cè)谠O(shè)置這一屬性的時(shí)候,我們使用的字符串必須具有有效的域前綴或它本身。
因此如果一個(gè)dimin初始值是home.xiang.com的字符串我們可以設(shè)置為xiang.com。另外document.domain的值中必須又一個(gè)點(diǎn)號(hào),不能把它設(shè)置為com或者其它頂級(jí)域名。
這時(shí),如果兩個(gè)窗體或者窗口包含的腳本吧document.domain設(shè)置成了相同的值,那么兩個(gè)窗口就不再受同源策略的約束了??梢韵嗷プx取屬性了。
4、請(qǐng)求中的 Access-Control-Allow-Origin受到同源策略的影響,同時(shí)我們也可以通過(guò)一些方法來(lái)達(dá)到跨域資源的共享,參見(jiàn)http://www.w3.org/TR/cors/ 這個(gè)標(biāo)準(zhǔn)和草案是用新的Origin:請(qǐng)求頭和新的Access-Control-Allow-Origin相應(yīng)來(lái)擴(kuò)展HTTP,它允許服務(wù)器用頭信息顯示的列出源,或使用通配符來(lái)匹配所有的源并允許由任何地址請(qǐng)求的文件,很多瀏覽器都使用這種新的頭信息來(lái)允許跨域的HTTP請(qǐng)求,這樣在我們的XMLHttpRequest就不會(huì)被同源策略限制。
5、跨文檔消息傳遞 window.postMessage()跨文檔消息,允許來(lái)自一個(gè)文檔的腳本可以傳遞文本消息到另一個(gè)文檔里的腳本,而不管腳本的來(lái)源是否相同,當(dāng)我們調(diào)用window對(duì)象上的postMessage方法時(shí)就可以異步的將信息傳遞到指定的窗口文檔,此時(shí)被接受的窗口中可以通過(guò)onmessage()的方法來(lái)接收到傳遞過(guò)來(lái)的信息,但是不能調(diào)用其他文檔的方法或者讀取屬性。也就是說(shuō)這只是一種通信技術(shù),并非是去控制另一個(gè)文檔的內(nèi)容。
postMessage()方法接受兩個(gè)參數(shù),第一個(gè)參數(shù)是要傳遞的信息,HTML5標(biāo)準(zhǔn)中提到,該參數(shù)可以是任意基本類(lèi)型的只或者是可以復(fù)制的對(duì)象,但是有些瀏覽器只支持字符串的傳遞,所有有時(shí)候傳遞的對(duì)象或者數(shù)組的時(shí)候需要進(jìn)行轉(zhuǎn)換。第二個(gè)參數(shù)是一個(gè)字符串,是指定窗口的源,也就是指定窗口的document.domain屬性的值,這其中包括了協(xié)議、主機(jī)名、以及URL端口部分,(除了這些信息之外的信息都會(huì)被忽略),如果需要傳遞給任何窗口,此時(shí)這個(gè)只可以設(shè)置為*,如果要指定和當(dāng)前窗口同源的話也可以使用/即可。
在目標(biāo)窗口就會(huì)觸發(fā)onmessage()事件,該事件接收到的是一個(gè)對(duì)象,包含一下屬性:
data
作為第一個(gè)參數(shù)傳遞給postMessage()方法的消息副本內(nèi)容。
source
消息源自的window對(duì)象。
origin
一個(gè)字符串,指定消息來(lái)源(URL)。——摘錄
本文大部分內(nèi)容摘自《JavaScript權(quán)威指南》一書(shū),詳細(xì)解說(shuō)請(qǐng)參考書(shū)中內(nèi)容。
作者的文章源地址 http://xiangzongliang.com/blo...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/93690.html
摘要:概述同源策略是對(duì)代碼能夠操作哪些內(nèi)容的一條完整的安全限制,也是由提出的一個(gè)著名的安全策略。同源策略的目的同源政策的目的,是為了保證用戶(hù)信息的安全,防止惡意的網(wǎng)站竊取數(shù)據(jù)。 [TOC] 1、概述 同源策略是對(duì)JavaScript代碼能夠操作哪些WEB內(nèi)容的一條完整的安全限制,也是由Netscape提出的一個(gè)著名的安全策略。所謂同源簡(jiǎn)單來(lái)說(shuō)就是三個(gè)相同,**1、域名相同2、協(xié)議相同3、端口...
摘要:就這樣被發(fā)明了,利用的屬性不受同源策略的控制,作弊般地巧妙地逃過(guò)了瀏覽器的這一限制。然后,聲明這個(gè)回調(diào)函數(shù)。 這是我在13年初寫(xiě)的文章,當(dāng)時(shí)懵懵懂懂寫(xiě)下了自己對(duì)JSONP的理解。 文章原文 博客 歡迎訂閱 提到JSONP,我當(dāng)時(shí)在網(wǎng)上找了無(wú)數(shù)帖子也沒(méi)有看懂它。那些文章大同小異,都是講到JSONP原理以后就戛然而止,把我們這些初學(xué)者搞得云里霧里。所以,寫(xiě)下這篇文章,希望對(duì)大家有幫助...
摘要:同源策略解釋之前,我們先簡(jiǎn)單聊聊同源策略。當(dāng)這些從第三方加載的腳本執(zhí)行出錯(cuò),因?yàn)檫`背了同源策略為了保證用戶(hù)信息不被泄露,錯(cuò)誤信息不會(huì)顯示出來(lái),取而代之只會(huì)返回一個(gè)。 一些用戶(hù)向我們反饋,F(xiàn)undebug的JavaScript監(jiān)控插件抓到了很多Script error.,然后行號(hào)和列號(hào)都是0...這就很尷尬了。 showImg(https://segmentfault.com/img/b...
摘要:比如基于的方法我認(rèn)為只有是正當(dāng)?shù)睦@過(guò)同源策略的方法同源策略是瀏覽器安全策略的基礎(chǔ),但同源策略面對(duì)很多攻擊是無(wú)能為力的,比如跨站腳本攻擊,名字跟同源策略很像,事實(shí)上他們之間基本沒(méi)有關(guān)系。 作者:肖光宇 野狗科技聯(lián)合創(chuàng)始人,先后在貓撲、百度、搜狗任職,愛(ài)折騰的前端工程師。野狗官博:https://blog.wilddog.com/ 野狗官網(wǎng):https://www.wilddog.com...
摘要:了解跨域這件事,我們先看看導(dǎo)致會(huì)存在跨域問(wèn)題的根源瀏覽器的同源策略瀏覽器的同源策略又是什么鬼好像了解一點(diǎn),但是又說(shuō)不清楚。請(qǐng)參考阮老師的跨域資源共享詳解 跨域的理解 跨域,顧名思義,即為請(qǐng)求了不同域的資源。了解跨域這件事,我們先看看導(dǎo)致會(huì)存在跨域問(wèn)題的根源:瀏覽器的同源策略瀏覽器的同源策略又是什么鬼? 好像了解一點(diǎn),但是又說(shuō)不清楚。這次我們就來(lái)詳細(xì)探索一下。 聲明一下,本文是參考眾多其...
閱讀 3093·2021-10-19 11:46
閱讀 1043·2021-08-03 14:03
閱讀 3049·2021-06-11 18:08
閱讀 2985·2019-08-29 13:52
閱讀 2898·2019-08-29 12:49
閱讀 574·2019-08-26 13:56
閱讀 991·2019-08-26 13:41
閱讀 908·2019-08-26 13:35