ASP.NET 中开放重定向问题

在url中带returnurl可以方便的重定向到原请求页面,但是链接可能会被修改,可能会跳到精心设计的钓鱼网页,并显示密码错误,需要再次输入密码,如果输入密码,密码就会泄露。

解决这个问题,需要在重定向前检测重定向页面是否合法

ASP.NET中的解决方法,编写如下扩展类

View Code
    public static class RequestExtensions

    {

        public static bool IsUrlLocalToHost(this HttpRequest request, string url)

        {

            if (String.IsNullOrEmpty(url))

            {

                return false;

            }



            Uri absoluteUri;

            if (Uri.TryCreate(url, UriKind.Absolute, out absoluteUri))

            {

                return String.Equals(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;

            }



        }

调用方法:

View Code
        public static void RedirectToReturnUrl(this HttpContext context)

        {

            string url = @"~/Default.aspx";

            if (context.Request["returnurl"] != null)

            {

                string temp =HttpUtility.UrlDecode(context.Request["returnurl"]);

                //判断是否是合法路径

                if(context.Request.IsUrlLocalToHost(temp))

                url = temp;

            }

          

            context.Response.Redirect(url);

        }

 

你可能感兴趣的:(asp.net)