我正在AntiXssEncoder
为使用 mvc3 和 .net4 的 Web 项目制作和设置,我已经完成了以下步骤:
- 添加
AxtiXSSLibrary
参考 - 创建
AntiXSSEncoder
派生自HttpEncoder
- 覆盖
HtmlEncode
方法:output.Write(Encoder.HtmlEncode(value));
- 设置为
encoderType
_web.config
<httpRuntime encoderType="AntiXSSEncoder, MyDll"/>
XssTest<script>alert("test");</script>
但是我仍然可以通过 xss 输入 ( )看到警报弹出窗口。
所以我测试并发现默认编码器不编码分配给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/>
谁能给我一个答案或线索?