XSS跨站腳本攻擊的基本原理和SQL注入攻擊類似,都是利用系統(tǒng)執(zhí)行了未經(jīng)過濾的危險(xiǎn)代碼,不同點(diǎn)在于XSS是一種基于網(wǎng)頁腳本的注入方式,也就是將腳本攻擊載荷寫入網(wǎng)頁執(zhí)行以達(dá)到對(duì)網(wǎng)頁客戶端訪問用戶攻擊的目的,屬于客戶端攻擊。而SQL注入攻擊將危險(xiǎn)代碼繞過正常的文本輸入變?yōu)榭蓤?zhí)行的SQL執(zhí)行語句從而操縱數(shù)據(jù)庫,從而進(jìn)一步探測(cè)、操縱數(shù)據(jù)庫信息。
在這里談到的跨站漏洞利用主要包括跨站腳本攻擊、以及跨站請(qǐng)求偽造與其它的同源攻擊,這些攻擊都是目前極普遍的攻擊方式,而同源攻擊主要涉及幾種攻擊方式:跨站腳本攻擊、跨站請(qǐng)求偽造、跨站請(qǐng)求跟蹤、網(wǎng)站緩存投毒、HTTP響應(yīng) Splitting、HTTP請(qǐng)求 Smuggling、HTML和JavaScript網(wǎng)絡(luò)掃描。
跨站腳本攻擊
跨站腳本攻擊是一種準(zhǔn)許將惡意代碼注入到網(wǎng)頁中的安全漏洞。這種攻擊主要用于:
A、釣魚或者 cookie竊取,目的是為了訪問受限信息。
B、為了惡搞、丑化其它網(wǎng)站或?qū)嵤┥缃还こ坦?/p>
C、在網(wǎng)站的客戶端上執(zhí)行惡意代碼
這種攻擊可以通過利用IMG標(biāo)記來實(shí)施破壞或惡搞,如關(guān)閉用戶瀏覽器的窗口,然后打開一個(gè)既無菜單也無工具欄的窗口,并播放一些惡搞性的聲音。
1、攻擊原理及類型
那么,這種攻擊是如何進(jìn)行的呢?總體說來,它分為兩種類型:其一是反射式攻擊,這種攻擊跟蹤網(wǎng)站通過cookies進(jìn)行的身份驗(yàn)證,這種網(wǎng)站一般都不太安全,容易遭受跨站腳本攻擊。使用社會(huì)工程(如告訴用戶“你中獎(jiǎng)了!”),如果目標(biāo)用戶受到誘騙,并單擊攻擊者注入到標(biāo)準(zhǔn)HTML代碼中的包含惡意代碼的鏈接,攻擊者就可以訪問用戶的cookie信息(會(huì)話和身份驗(yàn)證信息等)。其二是存儲(chǔ)式攻擊,其原理是:假設(shè)某個(gè)網(wǎng)站利用后端數(shù)據(jù)庫作為搜索網(wǎng)頁的信息源,黑客們并不將惡意代碼注入到普通頁面中,而是將SQL代碼注入到這種數(shù)據(jù)庫中。于是,每次從后端數(shù)據(jù)庫中返回查詢結(jié)果時(shí),都會(huì)包含著攻擊者的惡意代碼??梢韵胂?,這種攻擊并不是針對(duì)哪個(gè)客戶端,而是感染整個(gè)論壇的用戶組,并感染大量的容易輕信的受害者。
2、防范措施最重要的是要保護(hù)代碼。
你應(yīng)當(dāng)限制用戶輸入信息的顯示,實(shí)施過濾,僅顯示絕對(duì)需要的信息。建議你驗(yàn)證并清理所有形式的數(shù)據(jù)、數(shù)據(jù)源,以及你無法直接控制的URL參數(shù)。
一個(gè)很實(shí)用的技巧是用HTML實(shí)體(如&)來代替特別字符。為了減少特定HTML字符的數(shù)量,你必須限制用戶輸入,僅準(zhǔn)許用于網(wǎng)站的合法代碼段。例如,許多論壇通過運(yùn)用 標(biāo)記讓用戶輸入大寫字符,但是典型情況下,這些站點(diǎn)并不準(zhǔn)許你增添加自己的表單,所以不應(yīng)當(dāng)準(zhǔn)許表單。此外,如果這些標(biāo)記有特定的語法和值,那么你應(yīng)當(dāng)僅準(zhǔn)許與其語法保持一致的值(例如,字體顏色是一個(gè)僅包含字母A-F或數(shù)字0-9的3個(gè)或6個(gè)字符的值,所以,如果你準(zhǔn)許用戶輸入整個(gè)SQL語句,那么事情就糟了。)
此外,多數(shù)清理例程會(huì)用標(biāo)記來替換回車符和換行符,以及一些有害的單詞,如“script”,這雖然依賴于具體的應(yīng)用程序,但是許多網(wǎng)站有理由使用這種單詞,所以這些措施很難普及。
下面給出幾個(gè)不安全的例子:
Python的例子:
print""
ASP的例子:
將這種文本直接寫到HTML中會(huì)導(dǎo)致:
這里你可以看到的是合法的HTML,所以會(huì)得到處理:
下面給出幾個(gè)較安全的例子:
Python:
print cgi.escape("")
ASP:
跨站請(qǐng)求偽造
跨站請(qǐng)求偽造是另一種同源策略攻擊,它的目的是為了欺騙受害者加載一個(gè)包含惡意請(qǐng)求的網(wǎng)頁,要求用戶輸入其賬戶及口令等。這種欺騙依賴于用戶對(duì)其身份信息的信任。用戶一般會(huì)認(rèn)為他們只是在執(zhí)行不同的任務(wù),只不過是使用一種HTTP請(qǐng)求。攻擊者借用用戶自己的瀏覽器將攻擊發(fā)送給目標(biāo)站點(diǎn)。
1、跨站請(qǐng)求偽造的原理
首先,攻擊者將達(dá)到惡意站點(diǎn)的鏈接發(fā)布到目標(biāo)站點(diǎn)上,然后,就會(huì)有一些輕信的用戶瀏覽惡意網(wǎng)站,從而成為受害者,更有甚者,會(huì)成為其幫兇。在用戶受到誘騙將表單提交給原始的目標(biāo)網(wǎng)站(最初被植入惡意鏈接的網(wǎng)站)時(shí),用戶就會(huì)成為攻擊者的幫兇。因?yàn)橛脩粢呀?jīng)通過了身份驗(yàn)證,所以目標(biāo)網(wǎng)站會(huì)接受表單提交請(qǐng)求,并準(zhǔn)許修改敏感數(shù)據(jù),如用戶自己的口令或從網(wǎng)站上獲取關(guān)鍵的信息。
2、保護(hù)代碼
首先,要通過檢查REQUEST鏈接請(qǐng)求來限制對(duì)POST或Web應(yīng)用程序的訪問。
注意:有些瀏覽器會(huì)有一個(gè)空的鏈接請(qǐng)求,這也應(yīng)當(dāng)被阻止。
因而,相互認(rèn)證一般情況下是令牌化認(rèn)證的請(qǐng)求,即如果數(shù)據(jù)包含著一個(gè)適當(dāng)?shù)臋C(jī)密值,才可以接受粘貼數(shù)據(jù)。而且通過實(shí)行多個(gè)步驟的寫入過程或確認(rèn)頁面會(huì)強(qiáng)化這種安全機(jī)制。
總結(jié)
同源策略是一個(gè)在多數(shù)瀏覽器中實(shí)施的概念,但它可被XSS攻擊利用(它利用了一個(gè)用戶對(duì)于某個(gè)網(wǎng)站或應(yīng)用程序的信任),也可被XSRF利用(它利用了網(wǎng)站或應(yīng)用程序?qū)τ脩舻男湃危?/p>
那么,我們的策略簡(jiǎn)單地說就是:絕不相信任何人!
不妨將信任看做是一個(gè)雙向的街道:你永遠(yuǎn)不會(huì)知道哪個(gè)方向會(huì)出現(xiàn)車流。任何人都可以潛入到信任關(guān)系的中間,并濫用這種信任關(guān)系。