zoukankan      html  css  js  c++  java
  • 防止开放重定向,恶意篡改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("/");
    }
    

      

  • 相关阅读:
    delphi private public protected
    delphi 程序流程控制
    TTrayIcon-Delphi系统托盘组件
    如果没有你-莫文蔚
    ShellExecute 调用bat文件
    delphi ShellExecute使用
    delphi 测试ping
    centos7 安装redis
    my.cnf 基础配置
    Delphi的类和对象(七)- 继承
  • 原文地址:https://www.cnblogs.com/slwangzi/p/8496508.html
Copyright © 2011-2022 走看看