2011-03-31 53 views
3

我正在使用AntiXssLibrary 4.0,但它不能轉義\ x3c。我的錯誤是什麼?AntiXss庫運行不正常

我有配置AntiXss是基於這裏http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx默認HttpEncoder和設置的httpRuntimeencoderTypeweb.config

,我也創建AntiXSSEncoderHttpEncoder衍生而來,但代替過時

output.Write(AntiXss.HtmlEncode(value)); 

我用它來重寫HtmlEncode方法:如果我瀏覽這個

output.Write(Encoder.HtmlEncode(value)); 

目前:

http://localhost:28453/?k=sss\x3cscript\x3ealert%28\x27haaha\x27%29;\x3c/script\x3e 

警報「haaha」顯示AntiX ss庫不起作用。我只是想這樣的節目http://channel9.msdn.com/Events/MIX/MIX10/FT05看到分鐘13

要確認我還設置這個在動作:

public ActionResult Index(string k) 
    { 
     ViewBag.k = k; 
     ViewBag.j = Microsoft.Security.Application.Encoder.HtmlEncode(k); 
     return View(); 
    } 

然後在視圖中我把這個:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var a = '@ViewBag.k'; 
     var b = '@ViewBag.j'; 
    $('.resultName:first').html(b); 
}); 
</script> 

從瀏覽器中,值a和b是相同的,這表明AntiXss運行不正常!

<script type="text/javascript"> 
    $(document).ready(function() { 
     var a = 'sss\x3cscript\x3ealert(\x27haaha\x27);\x3c/script\x3e'; 
     var b = 'sss\x3cscript\x3ealert(\x27haaha\x27);\x3c/script\x3e'; 
     $('.resultName:first').html(b); 
    }); 
</script> 

更新:當我使用AntiXssEncoder如編碼器類型,只發生了。當我評論這個並重建。該單引號'由MVC逃脫。似乎AntiXss已禁用!我錯過了什麼嗎?我想這個工作,因爲我想\ x3c也像視頻一樣逃脫。

<!--<httpRuntime encoderType="AntiXSSEncoder, MVCWeb"/>--> 

回答

7

你說得對,既然4.0 ​​.NET已編碼的HTMLEncode撇號,和AntiXSS不會的,因爲,嚴格來說,它不是必需的HTML字符串,只爲屬性字符串。

現在,如果您將AntiXSS作爲不再適用的編碼器進行交換,並且人們可以無處不在地應用Html編碼。

因此,當我推入AntiXSS的下一個版本時,它將始終編碼撇號。

+0

太好了。它仍然需要編碼,因爲url像/?k = sss'; ...可以添加javascript,如果javascript字符串使用k的值。那麼現在該怎麼做?使用現有的.net 4編碼?但如何\ x3c等我想逃避也。根據視頻,以前版本的AntiXss已經被編碼,但現在沒有。如果插入到DOM中,則可以插入腳本標記,如/?k = sss \ x3cscript \ x3e。 – CallMeLaNN 2011-04-01 07:12:41

+1

我現在的建議是在你的編碼中更具體 - 在屬性中使用屬性編碼,當它在JavaScript中結束時使用javascript編碼等。 – blowdart 2011-04-01 11:23:56

+0

好的。我明白了你的觀點,我應該明確地使用'Encoder.JavascriptEncode()'將服務器值轉換爲javascript變量。就像Html屬性一樣。但是我認爲它可以被雙編碼,因爲'@'Razor和'<%: %>'會自動對它進行html編碼。使用@ Html.Raw(Encoder.JavascriptEncode(ViewBag.k))不是一個好習慣。也許AntiXss的使用方式可能有點困惑。解決這個雙重編碼的最佳做法是什麼? – CallMeLaNN 2011-04-02 06:35:10