防止开放重定向,恶意篡改returnUrl
2024-08-27 13:25:12
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("/");
}
最新文章
- SQL Server output经典使用
- C# 遍历指定目录下的所有文件及文件夹
- MSXML读取XML中文
- Pintos-斯坦福大学操作系统Project详解-Project1
- php把文件上传到远程服务器上例子
- Failed to start SYSV: Nginx is an HTTP(S) server, HTTP(S) reverse
- [1] Tornado Todo Day0
- 用 yo aspnet 生成.net项目
- Java框架之Spring MVC(二)
- Leetcode_171_Excel Sheet Column Number
- tensorflow分布式训练
- 多文件协作,extern、static、头文件
- 关于eclipse调试时程序控制台不能自动打开
- 怎样从外网访问内网Zeus?
- BZOJ1004 HNOI2008Cards(Burnside引理+动态规划)
- 主角场景Shader效果:遮挡透明
- java 和 C 代码运行效率的比较(整理)
- jdeveloper 恢复默认配置
- java中new一个对象放在循环体里面与外面的区别
- 解释一下python中的逻辑运算符