我正在使用AntiXssLibrary 4.0,但它不能轉義\ x3c。我的錯誤是什麼?AntiXss庫運行不正常
我有配置AntiXss是基於這裏http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx默認HttpEncoder
和設置的httpRuntime
的encoderType
在web.config
。
,我也創建AntiXSSEncoder
從HttpEncoder
衍生而來,但代替過時
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"/>-->
太好了。它仍然需要編碼,因爲url像/?k = sss'; ...可以添加javascript,如果javascript字符串使用k的值。那麼現在該怎麼做?使用現有的.net 4編碼?但如何\ x3c等我想逃避也。根據視頻,以前版本的AntiXss已經被編碼,但現在沒有。如果插入到DOM中,則可以插入腳本標記,如/?k = sss \ x3cscript \ x3e。 – CallMeLaNN 2011-04-01 07:12:41
我現在的建議是在你的編碼中更具體 - 在屬性中使用屬性編碼,當它在JavaScript中結束時使用javascript編碼等。 – blowdart 2011-04-01 11:23:56
好的。我明白了你的觀點,我應該明確地使用'Encoder.JavascriptEncode()'將服務器值轉換爲javascript變量。就像Html屬性一樣。但是我認爲它可以被雙編碼,因爲'@'Razor和'<%: %>'會自動對它進行html編碼。使用@ Html.Raw(Encoder.JavascriptEncode(ViewBag.k))不是一個好習慣。也許AntiXss的使用方式可能有點困惑。解決這個雙重編碼的最佳做法是什麼? – CallMeLaNN 2011-04-02 06:35:10