我如何允许传递包含不安全单词的密码

时间:2019-02-04 21:11:37

标签: asp.net asp.net-mvc asp.net-mvc-4 ldap

我正在处理一个asp.net MVC4 Web应用程序,对于登录,我使用的是表单身份验证,该身份验证使用LDAP连接字符串连接到我们的AD,如下所示。 登录获取操作方法:-

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    returnUrl = TempData["returnUrl"] != null ? TempData["returnUrl"].ToString() : String.Empty;
    List<String> domains = new List<String>();
    domains.Add("*****");
    ViewBag.ReturnUrl = returnUrl;
    ViewBag.Domains = domains;
    return View();
}

“登录帖子”操作方法:-

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    MembershipProvider domainProvider;
    domainProvider = Membership.Providers["TestDomain1ADMembershipProvider"];
    if (ModelState.IsValid)
    {
        // Validate the user with the membership system.
        if (domainProvider.ValidateUser(model.UserName, model.Password))
        {  
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            List<String> domains2 = new List<String>();
            domains2.Add("****");
            ViewBag.Domains = domains2;
            return View(model);
        }

        return RedirectToLocal(returnUrl);
    }
    List<String> domains = new List<String>();
    domains.Add("****");
    ViewBag.Domains = domains;
    return View(model);
}

现在我已经使用此系统5年了,用户登录从未遇到任何问题。但是今天,一个新用户提到,当他尝试登录系统时,将收到错误“ 处理您的请求时出错。”,并且如果未处理的异常是,则会在我们的系统中引发此错误。被提出。并且我检查了IIS日志,可以看到用户没有访问系统。

所以我能想到的唯一问题是用户密码包含MVC不允许的字符。例如,我尝试输入此密码<script>@1234和我的用户名,而不是收到此消息“ 提供的用户名或密码不正确。”,我遇到了相同的异常“ < em>处理您的请求时出错。“ ..当然,我不能要求用户提及他的密码,但是我不确定如何允许MVC接受传递给它的任何密码?因为我无法想到任何其他问题...通常在用户登录到应用程序时便会;成功登录或获取“提供的用户名或密码不正确”。 ,但我从未遇到过用户遇到异常的问题……我可以通过传递不安全的字符<script>@1234

来复制该异常

1 个答案:

答案 0 :(得分:3)

在您的LoginModel中,将AllowHtmlAttribute添加到Password字段中。这将绕过对<script>之类的输入的检查。

[AllowHtml]
public string Password { get; set; }

当然要少用。 MVC试图保护您免受脚本注入攻击,因此只有在可以确定安全处理该值的少数情况下,才应禁用此检查。 (在这种情况下,永远不要向用户显示密码,因此即使其中包含HTML,也无法将HTML注入页面。)

或者,如果您不能更改LoginModel类,则可以尝试将ValidateInputAttribute添加到Login POST方法中。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Login(LoginModel model, string returnUrl)