我的视图中有一行代码如下所示:
<button id="show-Lookup" class="inithide" name="show-Lookup">Lookup</button>
当它在表单提交时被发送回控制器时崩溃,并出现以下错误: “从客户端show-Lookup =”
中检测到一个潜在危险的Request.Form值当我在调试器中分析show-Lookup的值时,我看到以下内容: 的Request.Form [“显示,查找”] 查找
ASP.net MVC从哪里获得这个?这应该没有价值?
答案 0 :(得分:2)
这与MVC无关;它是基本的HTML。 Anything with a name
can be considered for inclusion in your form, subject to certain restrictions (see the spec)。如果您不希望它在表单中,请删除name
。
答案 1 :(得分:0)
在控制器上添加此属性
[ValidateInput(false)]
我想建议一件事,如果您不确定自己在做什么,就不要使用上面的代码。上面的代码不会让服务器验证它从表单中收到的输入。
这意味着,如果用户表单中输入的名称类似于“alert('hacked')”,您的控制器将按原样接收该值。如果你只是将它添加到数据库中并将其显示在灾难的某个地方。用户可以键入完全限定的javascript来发出ajax请求。
解决此问题的另一种方法只是从按钮中移除属性名称,因为它无法解决任何问题。
问题: 当我在调试器中分析show-Lookup的值时,我看到以下内容:Request.Form [“show-Lookup”]查找 ASP.net MVC从哪里获得这个?这应该没有值?
您正在看到此值,因为您已将属性名称添加到按钮,因为您已添加该属性,浏览器也将该属性发送给服务器。
答案 2 :(得分:0)
随表单提交<button></button>
。不同的浏览器对此略有不同 - IE发送开始和结束标记之间的任何值(“内容”按钮),而其他浏览器发送value
属性。
另请注意,除非您指定按钮,否则按钮的行为会因浏览器而异。在IE中(9?之前),<button>
元素是“按钮”类型,而在其他浏览器中它是“提交”。 (这也是W3C规范。)