zoukankan      html  css  js  c++  java
  • 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);
            }
  • 相关阅读:
    代码注入——c++代码注入
    Windows 用来定位 DLL 的搜索路径
    LoadLibraryA与GetProcAddress介绍
    DLL 函数导出的规则和方法
    C++ dll的隐式与显式调用
    C++ main函数的参数
    DLL注入之修改PE静态注入
    用户权限设置和进程权限提升
    DLL注入之windows消息钩取
    c++回调函数
  • 原文地址:https://www.cnblogs.com/FlyCat/p/2635485.html
Copyright © 2011-2022 走看看