asp.Net   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – 如何避免打开重定向漏洞并成功登录安全地重定向(提示:ASP.NET MVC 2默认代码是脆弱的)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
通常情况下,当网站要求您登录之前,您可以访问某个页面,您将进入登录屏幕,并在成功验证自己之后,将其重定向到原始请求的页面。这对于可用性非常有用 – 但是如果没有仔细检查,这个功能很容易成为一个 open redirect漏洞。

遗憾的是,有关此漏洞的示例,请查看ASP.NET MVC 2提供的默认LogOn操作:

[httpPost]
public ActionResult LogOn(LogOnModel model,String returnUrl)
{
    if (ModelState.IsValid) {
        if (Membershipservice.ValidateUser(model.UserName,model.password)) {
            Formsservice.SignIn(model.UserName,model.RememberME);

            if (!String.IsNullOrEmpty(returnUrl)) {
                return Redirect(returnUrl); // open redirect vulnerability HERE
            } else {
                return RedirectToAction("Index","Home");
            }

        } else {
            ModelState.AddModelError("","User name or password incorrect...");
        }
    }

    return View(model);
}

如果用户成功通过身份验证,则将其重定向到“returnUrl”(如果通过登录表单提交提供)。

这是一个简单的示例攻击(实际上是许多的一个),它利用了这个漏洞:

>攻击者假装成为受害者的银行,向受害者发送电子邮件,其中包含一个链接,如:http://www.mybank.com/logon ?returnUrl = https://www.badsite.com
>被教导验证ENTIRE域名(例如,google.com = GOOD,google.com.as31x.example.com = BAD),受害者知道链接可以 – 没有任何棘手的子域网钓继续
>受害者点击链接,看到他们实际熟悉的银行网站,并被要求登录
>受害者登录,随后重定向到http://www.badsite.com,该网站看起来与受害者银行的网站完全一样,所以受害者不知道他现在在不同的网站上。
> http://www.badsite.com说“我们需要更新我们的记录 – 请在下面输入一些非常个人的信息:[ssn],[地址],[电话号码]等。
>受害者,仍然认为他在他的银行网站上,为诡计而提供攻击者信息

关于如何维护这种重定向登录功能的任何想法,避免了开放式重定向漏洞?

我倾向于将“returnUrl”参数拆分为控制器/操作部件,并使用“RedirectToRouteResult”而不是简单的“重定向”。这种方法是否会开启任何新的漏洞?

更新

通过将自己限制在控制器/动作路由上,我无法重定向到自定义路由(例如/ BACkend / calendar / 2010/05/21)。我知道通过将更多的参数传递给LogOn动作,我可以让它工作,但我觉得我总是会重新访问这种方法 – 使用我们的路由方案来保持最新状态。所以,我不是将returnUrl分解为其控制器/动作部分,而是按原样保持returnUrl,并解析它,以确保它只包含相对路径(例如/ users / 1),而不是绝对路径(例如http ://www.badsite.com/users/1)。这是我使用的代码:

private static bool checkRedirect(String url) {
    try {
        new Uri(url,UriKind.RelativE);
    }
    catch (UriFormatException E) {
        return false;
    }

    return true;
}

旁注:我知道,与XSS和CSRF相比,这种开放式重定向可能不是一件大事,但是我们的开发人员是保护我们的客户免受坏人的唯一保护 – 我们可以做坏事“我的书更难获得胜利。

谢谢Brad

解决方法

Jon Galloway为MVC 2(和1)写了一个 article的解决方案。

这是您的问题应该有助于您的代码段:

private bool IsLocalUrl(String url)
{
    if (String.IsNullOrEmpty(url))
    {
        return false;
    }

    Uri absoluteUri;
    if (Uri.TryCreate(url,UriKind.Absolute,out absoluteUri))
    {
        return String.Equals(this.request.Url.Host,absoluteUri.Host,StringComparison.ordinalIgnoreCasE);
    }
    else
    {
        bool isLocal = !url.StartsWith("http:",StringComparison.ordinalIgnoreCasE)
            && !url.StartsWith("https:",StringComparison.ordinalIgnoreCasE)
            && Uri.IsWellFormedUriString(url,UriKind.RelativE);
        return isLocal;
    }
}

大佬总结

以上是大佬教程为你收集整理的asp.net-mvc – 如何避免打开重定向漏洞并成功登录安全地重定向(提示:ASP.NET MVC 2默认代码是脆弱的)全部内容,希望文章能够帮你解决asp.net-mvc – 如何避免打开重定向漏洞并成功登录安全地重定向(提示:ASP.NET MVC 2默认代码是脆弱的)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。