Как я могу разрешить передачу паролей, которые содержат небезопасные слова - PullRequest
0 голосов
/ 05 февраля 2019

Я работаю над веб-приложением asp.net MVC4, и для входа в систему я использую проверку подлинности формы, которая подключена к нашей AD с использованием строки подключения LDAP, как показано ниже.Метод действия Get login: -

[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

1 Ответ

0 голосов
/ 05 февраля 2019

В вашем 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)
...