我怎么能允许包含不安全的话传递密码

问题描述 投票:2回答:1

我工作的一个asp.net MVC4 Web应用程序,并为登录我使用的是使用LDAP连接字符串连接到我们的广告,如下形式的认证。登录获取动作方法: -

[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年,从来没有面对用户登录任何问题。但今天一个新的用户提到,当他试图登录到系统,他将得到一个错误“错误处理您的请求。”,而这个错误会在我们的系统中,如果未处理的异常被提高3。和我检查IIS日志,我可以看到的是,用户没有访问系统。

所以我能想到的唯一的问题是,用户的密码含有MVC不允许的字符。例如,我试图用我的用户名的输入此密码<script>@1234,和而不是得到这个消息“提供的用户名或密码不正确。” ,我得到了同样的异常“错误处理您的请求。”当然我不能要求用户提他的密码,但我不知道我怎么可以让MVC接受传递给它的任何密码?因为我想不出其他任何问题......因为通常当用户登录到应用程序,他们要么;成功登录或获得“提供的用户名或密码不正确。” ,但我从来没有遇到一个问题,用户会得到一个异常...我能够通过传递不安全的字符复制<script>@1234

asp.net asp.net-mvc asp.net-mvc-4 ldap
1个回答
3
投票

在您的LoginModel使AllowHtmlAttribute添加到Password领域。这将绕过对像<script>输入检查。

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

使用它不遗余力,当然。 MVC正试图保护你免受脚本注入攻击,因此你只应禁用此检查在少数情况下,你可以肯定值安全处理。 (在这种情况下,密码不应该被显示给用户,所以即使在HTML,它不能注入HTML到页)。

另外,如果你不能改变LoginModel类,你可以尝试添加ValidateInputAttributeLogin POST方法。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Login(LoginModel model, string returnUrl)
© www.soinside.com 2019 - 2024. All rights reserved.