• 防止开放重定向,恶意篡改returnUrl


    1.防止开放重定向:

      

            /// <summary>
            /// 防止开放重定向
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static bool IsLocalUrl(string url)
            {
                if (string.IsNullOrEmpty(url))
                    return false;
                bool result = ((url[0] == '/' && (url.Length == 1 || (url[1] != '/' && url[1] != '\'))) || (url.Length > 1 && url[0] == '~' && url[1] == '/'));
    
                //绝对路径
                if (!result && (url.StartsWith("http:", StringComparison.OrdinalIgnoreCase) || url.StartsWith("https:", StringComparison.OrdinalIgnoreCase)))
                {
                    Uri absoluteUri;
                    if (Uri.TryCreate(url, UriKind.Absolute, out absoluteUri))
                    {
                        return String.Equals(HttpContext.Current.Request.Url.Host, absoluteUri.Host, StringComparison.OrdinalIgnoreCase);
                    }
                }
                return result;
                //来自Mvc中的UrlHelper.IsLocalUrl,只能判断相对路径
                //!string.IsNullOrEmpty(url) && ((url[0] == '/' && (url.Length == 1 || (url[1] != '/' && url[1] != '\'))) || (url.Length > 1 && url[0] == '~' && url[1] == '/'));
            }
    

      

    2.使用方法:

    public void Login(string userName,string password, string returnUrl)
    {
    //logic code
    //validate userName password
    
    if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl) )
    {
    return Response.Redirect(returnUrl);
    }
    return Response.Redirect("/");
    }
    

      

  • 相关阅读:
    什么是Netflix Feign?它的优点是什么?
    Spring Boot 自动配置原理是什么?
    springcloud断路器作用?
    什么是SpringCloudConfig?
    find命令查找包含指定内容的文件
    @PostConstruct使用总结
    @Retention 注解的作用
    SpringBoot自定义Condition注解
    Spring Boot 入门
    SpringBoot +MSSQL
  • 原文地址:https://www.cnblogs.com/slwangzi/p/8496508.html
Copyright © 2020-2023  润新知