HttpRuntime中的默认编码器不适用于ViewBag

时间:2014-05-12 07:48:03

标签: asp.net-mvc-3 html-encode antixsslibrary httpruntime

我正在为我的使用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">&#13;&#10;XssTest&lt;script&gt;alert(&quot;Test&quot;);&lt;/script&gt;</textarea>    <p/>
XssTest<script>alert("Test");</script>    <p/>
XssTest&lt;script&gt;alert(&quot;Test&quot;);&lt;/script&gt;    <p/>

任何人都能给我一个答案或线索吗?

0 个答案:

没有答案