XSS(Cross Site Scripting)的全稱是跨站腳本攻擊,之所以叫XSS,是想與Web中的另一個(gè)層疊樣式表CSS區(qū)分開來。該攻擊主要是在網(wǎng)頁中嵌入JavaScript腳本代碼,當(dāng)用戶訪問此網(wǎng)頁時(shí),腳本就會(huì)在瀏覽器中執(zhí)行,從而達(dá)到攻擊的目的。在XSS攻擊中,一般有3個(gè)角色參與:攻擊者、目標(biāo)服務(wù)器、受害者的瀏覽器。由于有些服務(wù)器沒有對(duì)用戶的輸入進(jìn)行安全驗(yàn)證,攻擊者可以通過正常書寫的方式并帶有部分的HTML惡意腳本代碼的方法來進(jìn)行攻擊,當(dāng)受害者的瀏覽器訪問目標(biāo)服務(wù)器時(shí),由于對(duì)目標(biāo)服務(wù)器的信任,這段惡意代碼的執(zhí)行不會(huì)受到什么阻礙,從而形成了XSS攻擊。
下面通過一個(gè)的實(shí)例來演示一下XSS具體情況。我們要使用到JavaScript的腳本如下:
<script>alert(document.cookie);</script>
這個(gè)語句的含義是以警告框的形式將用戶訪問網(wǎng)站的Cookie輸出。如果攻擊者向一個(gè)網(wǎng)站輸入數(shù)據(jù)時(shí),在正常數(shù)據(jù)后面帶上這一段代碼,那么那個(gè)網(wǎng)站的源碼將變成如下情況。
<html>
…
test<script>alert(document.cookie);</script>
…
</html>
熟悉 JavaScript 的朋友,這時(shí)候應(yīng)該已經(jīng)明白如果受害者訪問這個(gè)網(wǎng)頁時(shí)會(huì)發(fā)生什么事情。當(dāng)他訪問的時(shí)候,瀏覽器界面就會(huì)彈出用戶的Cookie信息。這里只是XSS的一個(gè)小演示,只要愿意,黑客可以向里面插入任意的代碼,甚至寫一個(gè)js文件代碼,以引用的形式插入進(jìn)入網(wǎng)頁。下面介紹XSS的攻擊類型。
1. 反射型XSS
反射型 XSS 又稱非持久型 XSS。之所以稱為反射型 XSS,是因?yàn)檫@種攻擊方式的注入代碼是從目標(biāo)服務(wù)器通過錯(cuò)誤信息、搜索結(jié)果等方式“反射”回來的。而稱為非持久型XSS,則是因?yàn)檫@種攻擊方式是一次性的。攻擊者通過電子郵件等方式將包含注入腳本的惡意鏈接發(fā)送給受害者,當(dāng)受害者單擊該鏈接時(shí),注入腳本被傳輸?shù)侥繕?biāo)服務(wù)器上,然后服務(wù)器將注入腳本“反射”到受害者的瀏覽器上,從而在該瀏覽器上執(zhí)行了這段腳本。例如,攻擊者將如下鏈接發(fā)送給受害者:
http://www.example.com/search.asp?input=。
當(dāng)受害者單擊這個(gè)鏈接的時(shí)候,注入的腳本被當(dāng)作搜索的關(guān)鍵詞發(fā)送到目標(biāo)服務(wù)器的search.asp頁面中,則在搜索結(jié)果的返回頁面中,這段腳本將被當(dāng)作搜索的關(guān)鍵詞而嵌入。這樣,當(dāng)用戶得到搜索結(jié)果頁面后,這段腳本也得到了執(zhí)行。這就是反射型XSS攻擊的原理,可以看到,攻擊者巧妙地通過反射型XSS的攻擊方式,達(dá)到了在受害者的瀏覽器上執(zhí)行腳本的目的。由于代碼注入的是一個(gè)動(dòng)態(tài)產(chǎn)生的頁面而不是永久的頁面,因此這種攻擊方式只在單擊鏈接的時(shí)候才產(chǎn)生作用,這也是它被稱為非持久型XSS的原因。
2. 存儲(chǔ)型XSS
存儲(chǔ)型XSS又稱持久型XSS,它和反射型XSS最大的不同就是,攻擊腳本將被永久地存放在目標(biāo)服務(wù)器的數(shù)據(jù)庫和文件中。這種攻擊多見于論壇,攻擊者在發(fā)帖的過程中,將惡意腳本連同正常信息一起注入到帖子的內(nèi)容之中。隨著帖子被論壇服務(wù)器存儲(chǔ)下來,惡意腳本也永久地被存放在論壇服務(wù)器的后端存儲(chǔ)器中。當(dāng)其他用戶瀏覽這個(gè)被注入了惡意腳本的帖子的時(shí)候,惡意腳本則會(huì)在他們的瀏覽器中得到執(zhí)行,從而受到攻擊。可以看到,存儲(chǔ)型XSS的攻擊方式能夠?qū)阂獯a永久地嵌入一個(gè)頁面當(dāng)中,所有訪問這個(gè)頁面的用戶都將成為受害者。如果我們能夠謹(jǐn)慎對(duì)待不明鏈接,那么反射型XSS攻擊將沒有多大作為,而存儲(chǔ)型XSS則不同,由于它注入的往往是一些受信任的頁面,因此無論多么小心,都難免會(huì)受到攻擊??梢哉f,存儲(chǔ)型XSS更具有隱蔽性,帶來的危害也更大,除非服務(wù)器能完全阻止注入,否則任何人都很有可能受到攻擊。
3. DOM XSS
DOM XSS全稱是DOM Based XSS(基于DOM的XSS),其實(shí)這種XSS攻擊并不是以是否存儲(chǔ)在服務(wù)器中來劃分的。理論上,這種攻擊也屬于反射型XSS攻擊,但之所以不將它歸為反射型是因?yàn)樗哂刑厥獾牡胤健_@種類型的攻擊不依賴于起初發(fā)送到服務(wù)器的惡意數(shù)據(jù)。這似乎與前面介紹的XSS有些出入,但是可以通過一個(gè)例子來解釋這種攻擊。
當(dāng)Javascript在瀏覽器執(zhí)行時(shí),瀏覽器提供給Javascript代碼幾個(gè)DOM對(duì)象。文檔對(duì)象首先在這些對(duì)象之中,并且它代表著大多數(shù)瀏覽器呈現(xiàn)的頁面的屬性。這個(gè)文檔對(duì)象包含很多子對(duì)象,如 location、URL和referrer。這些對(duì)象根據(jù)瀏覽器的顯示填充瀏覽器。因此,document.URL和document.location是由頁面的URL按照瀏覽器的解析填充的。注意,這些對(duì)象不是提取自HTML的body,它們不會(huì)出現(xiàn)在數(shù)據(jù)頁面。文檔對(duì)象包含一個(gè)body對(duì)象,它代表對(duì)于HTML的解析。
<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexof("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
</HTML>
以上是HTML里面解析URL和執(zhí)行一些客戶端邏輯的代碼。然后,在發(fā)送請(qǐng)求的后面加上如下的指令:
http://www.example.com/welcome.html?name=abc。
當(dāng)受害者訪問到該網(wǎng)站時(shí),瀏覽器會(huì)解析這個(gè) HTML 為 DOM,DOM 包含一個(gè)對(duì)象叫document,document里面有一個(gè)URL屬性,這個(gè)屬性里填充著當(dāng)前頁面的URL。當(dāng)解析器到達(dá)javascript代碼,它會(huì)執(zhí)行它并且修改HTML頁面。倘若代碼中引用了document.URL,那么,這部分字符串將會(huì)在解析時(shí)嵌入到 HTML 中,然后立即解析,同時(shí),Javascript 代碼會(huì)找到(alert(document.cookie))并且在同一個(gè)頁面執(zhí)行它,這就產(chǎn)生了XSS的條件。
4. 檢測
可以看出,XSS攻擊是與SQL注入類似的代碼注入類漏洞。并且在JavaScript靈活運(yùn)用的今天,對(duì)于XSS的檢測與預(yù)防必不可少。下面簡單介紹一下XSS的預(yù)防措施。
(1)輸入檢測對(duì)用戶輸入的數(shù)據(jù)進(jìn)行檢測。對(duì)于這些代碼注入類的漏洞原則上是不相信用戶輸入的數(shù)據(jù)的。所以,我們要對(duì)用戶輸入的數(shù)據(jù)進(jìn)行一定程度的過濾,將輸入數(shù)據(jù)中的特殊字符與關(guān)鍵詞都過濾掉,并且對(duì)輸入的長度進(jìn)行一定的限制。只要開發(fā)的人員嚴(yán)格檢查每個(gè)輸入點(diǎn),對(duì)每個(gè)輸入點(diǎn)的數(shù)據(jù)進(jìn)行檢測和XSS過濾,是可以阻止XSS攻擊的。(2)輸出編碼造成XSS的還有一個(gè)原因是應(yīng)用程序直接將用戶輸入的數(shù)據(jù)嵌入HTML頁面中。如果我們對(duì)用戶輸入的數(shù)據(jù)進(jìn)行編碼,之后在嵌入頁面中,那么HTML頁面會(huì)將輸入的數(shù)據(jù)當(dāng)作是普通的數(shù)據(jù)進(jìn)行處理。(3)Cookie安全利用XSS攻擊可以輕易獲取到用戶的Cookie信息,那么需要對(duì)用戶的Cookie進(jìn)行一定的處理。首先應(yīng)盡可能減少Cookie中敏感信息的存儲(chǔ),并且盡量對(duì)Cookie使用散列算法多次散列存放。
更多關(guān)于“網(wǎng)絡(luò)安全培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來試聽。