【发布时间】:2019-02-04 21:11:36
【问题描述】:
我正在开发一个 asp.net MVC4 Web 应用程序,对于登录,我使用的是使用 LDAP 连接字符串连接到我们的 AD 的表单身份验证,如下所示。 登录Get操作方法:-
[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();
}
Login Post 操作方法:-
[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 以及我的用户名,而不是收到此消息“提供的用户名或密码不正确。”,我得到了相同的异常“处理您的请求时出错。".. 当然我不能要求用户提及他的密码,但我不确定如何允许 MVC 接受传递给它的任何密码?因为我想不出任何其他问题......因为通常当用户登录到应用程序时,他们要么;登录成功或得到“提供的用户名或密码不正确”。 ,但我从来没有遇到过用户遇到异常的问题......我可以通过传递不安全的字符来复制它<script>@1234
【问题讨论】:
-
在
Login(LoginModel, string)方法中设置断点并验证模型是否被正确序列化。这可能是 MVC 而不是 AD/LDAP 中的问题。如果它是 AD 的问题,它可能会在ValidateUser抛出一个异常,该异常隐藏在通用HTTP 500 错误后面。您可能可以通过添加 try/catch 块并检查/记录异常来获取更多信息。 -
@p.s.w.g 当我在 Visual Studio 中调试应用程序并输入以下密码
<script>后登录操作方法Login(LoginModel, string)上的断点将无法到达。相反,我会得到以下异常A potentially dangerous Request.Form value was detected from the client (Password="<script>").当然如果在实时服务器上引发此错误,用户将得到Error while processing .... -
.. 那么我可以允许
Login(LoginModel, string)post 操作方法接受不安全的字符吗?
标签: asp.net asp.net-mvc asp.net-mvc-4 ldap