我正在为我的使用mvc3和.net4的网络项目制作AntiXssEncoder
,我已经完成了以下步骤:
AxtiXSSLibrary
参考AntiXSSEncoder
HttpEncoder
HtmlEncode
方法:output.Write(Encoder.HtmlEncode(value));
encoderType
中的web.config
设置为<httpRuntime encoderType="AntiXSSEncoder, MyDll"/>
但我仍然可以通过xss输入(XssTest<script>alert("test");</script>
)看到警告弹出窗口。
所以我测试了一下,发现默认编码器不会对分配给ViewBag
的值进行编码。我的测试代码如下,它显示一个未编码。
//In controller code
[ValidateInput(false)]
public ActionResult AntiXss(string TextArea)
{
ViewBag.DisplayInput = TextArea;
ViewBag.DisplayEncodedInput = Encoder.HtmlEncode(TextArea);
return View();
}
//In view code
@using (Html.BeginForm("AntiXss", "Test"))
{
@Html.TextArea("TextArea")
<p/>
@Html.Raw(ViewBag.DisplayInput)
<p/>
@Html.Raw(ViewBag.DisplayEncodedInput)
//@ViewBag.DisplayInput
<p/>
<input type="submit" value="ok"/>
}
//In redered page code
<textarea id="TextArea" name="TextArea"> XssTest<script>alert("Test");</script></textarea> <p/>
XssTest<script>alert("Test");</script> <p/>
XssTest<script>alert("Test");</script> <p/>
任何人都能给我一个答案或线索吗?