2017-04-24 66 views
1

我正在處理包含大量模塊的.NET 4.5 Web應用程序(非MVC)。 在測試過程中,我發現我的應用程序容易受到反射式跨站點腳本攻擊。試圖阻止通過URL執行惡意XSS腳本

舉例來說,這是我的樣本網址是什麼樣子像:

example.com/abc.aspx?id=1234 

現在,如果有人試圖取代值id中輸入任何腳本,例如

id=<somescript> 

這個腳本會得到執行。

如何阻止輸入URL中的腳本執行? 目前我不專注於基於UI的輸入元素,如文本框等

我需要一種方法來阻止通過URL執行惡意腳本。

我試圖使validateRequest財產。儘管它阻止了腳本在整個應用程序中執行,但是它存在一個問題。 它還阻止在基於UI的輸入字段(如文本框)中輸入的安全標記執行。

對於我的應用程序的用戶期望在文本域和文本框輸入一些樣本標記。

目前我只想阻止基於瀏覽器URL的XSS腳本。我怎樣才能實現它?

更新:

我試着在我的web.config文件中添加以下的自定義頁眉:

X-XSS-保護 - 但它不是由火狐

內容安全支持政策 - 它不支持IE。

這我工作的應用程序是非常大的,因此它需要佔用大量的時間,我做是爲了進行驗證的代碼更改。 有沒有什麼辦法可以在Web.config級別本身進行更改?

+0

知道這個技巧會很有趣,特別是對於舊的項目。 –

+0

@Bagus Tesa如果您的應用程序不需要允許標記/腳本作爲來自UI輸入元素(如文本框等)的輸入,那麼您可以安全地繼續並啓用已在web.config中設置的web.config –

+0

中的validateRequest屬性validateRequest之一。不幸的是,網站審計員之一發現像'faq.aspx /'%20onclick =%22alert('Someauditor')%22%20ignoreme ='這樣的網址會將xss漏洞帶給網絡表單..儘管沒有代碼它將URL中的任何內容打印到文檔主體 - 只有由asp和我定義的asp web表單的「action」不知道我們是否可以覆蓋它。 –

回答

0

最好的辦法是使用validateRequest屬性,改變你的邏輯如何以及爲什麼你經過HTML在您的GET請求。也許你只需要傳遞這個文本框的id或值。

+0

是否有任何方法可以在web.config文件中進行更改,以便它適用於整個應用程序本身。我的應用程序太大,因此改變每個輸入的邏輯將是不可行的。 –

1

你可以嘗試設置System.Web.Security.AntiXss.AntiXssEncoder(可用自.NET 4.5),爲您的ASP.NET應用程序的默認編碼器。

它編碼意味着一個URL,HTML,CSS或XML字符串中使用的字符串。

用法在web.config

<httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder" /> 

沒有爲早期版本的.NET的選擇:Microsoft.Security.Application.AntiXssEncoder可用on NuGet。用法在web.config

<httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary" /> 

你可以找到關於如何防止this OWASP article XSS攻擊的詳細信息。