当我不使用razor Html助手时,为什么我的输入没有得到验证?

时间:2017-05-19 00:13:23

标签: c# asp.net-mvc validation razor xss

假设我有一个不使用razor html助手/模型的简单Web表单。

<form id="survey-form" action="@Url.Action("Submit", "Questionnaire")" method="post">
   <textarea name="1" form="survey-form">
</form>

上述表单使用

提交
$("#survey-form").submit();

在控制器上发布以下测试方法

[HttpPost]
[ValidateAntiForgeryToken]
[ValidateInput(true)]
public ActionResult Submit()
{
    NameValueCollection nvc = Request.Form;
    return View();
}

<script>alert("xss!")</script>进入我的文本输入不会被控制器验证。我通常期望抛出"A potentially dangerous Request.Form was detected from the client ..."异常。

方法不会返回任何异常或消息,并且可以运行。

MSDN文档说

  

HttpRequest类使用输入验证标志来跟踪是否对通过 Cookie,Form和QueryString属性访问的请求集合执行验证。

由于我发布并处理了具有潜在危险值的已发布表单,我希望我的输入能够得到验证。

我是否仍然可以使用像ValidateInput属性这样的简单MVC助手来验证用户输入而不使用ASP.NET MVC约定? (例如,使用razor html助手和模型等创建表单。)

编辑: 由于似乎有些混淆的值实际上达到了我在控制器上的动作,这里有一个屏幕截图,展示了值到达功能。 enter image description here

1 个答案:

答案 0 :(得分:2)

我认为你应该将FormCollection作为Submit ActionResult的参数。