2011-04-22 16 views
0

我有一個頁面,它接受一個querystring參數並將其輸出爲一個javascript變量。該變量將用作導航到頁面的參數。在ASP.Net中輸出javascript的XSS

只有JSEncode上querystring參數阻止XSS?

輸入:

www.foo.com?t=abc<script>alert('hello xss')</script> 

我想發出這樣的t值作爲一個js VAR

var qs = Request.QueryString["t"].jsencode(); 
+0

請不要將「asp.net c#」添加到您的標題中。這就是標籤的用途。 – 2011-04-22 20:05:51

回答

2

看在Microsoft Web Protection Library中AntiXSS類。它有許多有用的消毒輸入方法,包括一個可以完全按照你想要的方式執行的操作:JavaScriptEncode。

0

除了正確編碼JavaScript變量的查詢字符串外,您還應該檢查應用程序邏輯實際允許的重定向。即您可能還想完全阻止諸如www.foo.com?t=http://very.evil.com/dark.side之類的內容,並將失敗頁面呈現平淡化(除非您確實希望自己的網頁重定向到隨機的其他網站)。

0

你想解決這兩個部分。

var sourceUri = Request.QueryString["t"]; 
if (!Uri.IsWellFormedUriString(sourceUri, UriKind.Absolute)) 
{ 
    // Not a valid URI - bail out 
} 

其次,你應該輸出編碼爲JavaScript:第一,所以在這種情況下,要確保「T」確實是一個有效的URL驗證對一個白名單不可信的輸入。要做到這一點你最好的辦法就是抓住AntiXSS和執行以下操作:

var encodedString = Encoder.JavaScriptEncode(sourceUri); 

更多的閱讀,嘗試OWASP Top 10 for .NET developers part 2: Cross-Site Scripting (XSS)