关于c#:MVC密码字段输入会引发”从客户端检测到潜在的Request.Form值”

MVC password field input raises “A potentially dangerous Request.Form value was detected from the client”

我遇到了一个有趣的情况,用户输入包含'<'和'>'符号的密码。

具有MVC 5的默认表单验证功能,出现错误:

A potentially dangerous Request.Form value was detected from the client (Password="1 < 2 3 a @ < i O")

(在上述错误中,我故意在密码值中放置空格,否则将无法显示...这确实有潜在的危险... !!!)

现在,我知道mvc会自动对用户输入进行编码以避免交叉站点脚本编写,因此在常规文本框中,我不会遇到这样的问题,但是在密码字段中,它显然不会被自动编码(因为它不应该!)。

一种快速的(可能是肮脏的)解决方法是,我在模型的密码字段上启用了[AllowHtml]装饰器。

另一个快速的(可能更肮脏的)解决方法是在控制器操作上启用[ValidateInput(false)]装饰器。

但是我想要一些可以解决我的问题并且不会在系统中打开任何其他潜在漏洞的建议...请提出任何建议??


对于登录控制器,可以关闭验证。密码永远不会显示,甚至不会存储在任何地方,如果您在任何地方显示用户名,只需确保密码正确编码即可。标准输入验证显然不知道您如何使用输入的数据,因此必须非常偏执。好像没有关闭它一样,在必要时会自动降低应用程序的安全性。