1. 程式人生 > >ASP.NET 下 XSS 跨站指令碼攻擊的過濾方法

ASP.NET 下 XSS 跨站指令碼攻擊的過濾方法

做 WEB 開發當然要防止跨站指令碼攻擊了,尤其是開發BLOG、論壇、購物平臺等可以讓使用者新增自定義內容的網站。

有些開發者選擇了將所有Html內容都過濾掉,但是這些不適合有些需要將自定義內容開放給使用者的網站,比如淘寶、cnblogs、CSDN這樣的網站。

在 .net 下也有一些 Xss 過濾工具,但是這些工具都會將HTML過濾的很徹底,比如會將:

<span style="color:red">文字</span>

過濾成

<span>文字</span>

而另外一些,雖然保留了很多元素,但是會有很多安全隱患,比如無法過濾這樣的跨站指令碼攻擊:
<div style="background-image:url(alert('xss'))">文字</div>
<img src="alert('xss too')" />

在 .net 環境下,始終找不到成熟合適的 XSS 過濾工具。

後來在找到了基於 java 開發的 AntiSamy,完全符合既保留使用者輸入HTML,又能保證安全的過濾工具。AntiSamy是基於白名單的技術,即只保留安全的內容,而且白名單可以讓開發者進行配置。雖然AntiSamy也有.net版本,但是那是一個半成品,慘不忍睹。於是只好把Java下的AntiSamy封裝成WebService,供.net程式呼叫。當然,這需要你有獨立的伺服器,虛擬主機是不行了。

以下是我封裝好的 Java WebService 原始碼和 WAR 檔案的下載地址:

如果只想使用,則只下載WAR檔案就可以了。

執行環境是TOMCAT 7,JDK 1.6。

將War包複製到Tomcat安裝目錄下的webapps目錄,然後啟動Tomcat即可。

啟動Tomcat後,會自動解壓縮War包,如需更改過濾配置,可以修改Tomcat目錄下的

webapps\XssFilter3\WEB-INF\conf\antisamy-config.xml

儲存後,重啟Tomcat即可生效。

預設WebService地址是

http://[youserver]:[yourport]/XssFilter3/services/AntiSamyFilter

.net環境下得到wsdl的地址是

http://[youserver]:[yourport]/XssFilter3/services/AntiSamyFilter?wsdl