前言

简单介绍一下重定向攻击。

正文

攻击思路:

看着上面挺复杂的,其实是一些很简单的步骤。

  1. 攻击者通过某些手段,让用户打开了一个好站点,打开的这个地址里面带有重定向信息,重定向信息就是自己伪造的站点。

这是因为我们一般不知道网站从哪个页面而来,登录后会返回伪造的站点,也就是我们的后台会利用重定向信息。

  1. 然后用户就输入了正确的账户密码,然后重定向到伪造的站点,这个伪造的站点也是一个登录页面,和真实站点一模一样。

  2. 这个时候用户以为自己账户密码输入错误,然后再输入一遍,这个时候攻击者就拿到了用户的账户密码,然后再跳转到官方站点。

  3. 因为跳转到官方站点了,然后用户是可以正常操作的,用户就以为一切操作正常,然后就很开心的买买买了。

上述攻击步骤大体是这样。

攻击的必要条件:

  1. 我们的站点没有验证重定向的地址

  2. 用户访问了伪造站点

第二点基本上没有解决方案,因为我们不知道会遇上什么样的用户。

重定向方案:

  1. 使用localRedirest 来处理重定向

  2. 验证重定向的目标域名是否合法

那么下面就看下这两种防范方式。

[HttpGet]
public async Task<IActionResult> CookieLogin(string userName,string returnUrl)
{
var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
identity.AddClaim(new Claim("Name", userName));
await this.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,new ClaimsPrincipal(identity));
return Redirect(returnUrl);
}

看到了吧,上面就直接通过Redirect(returnUrl);来跳转。

那么可以通过这样:return LocalRedirect(returnUrl);

这样就是只能跳转到同域名的网址下面。

LocalRedirect 会有验证,然后抛出异常,然后就被我们的未处理异常处理了,然后就进入404这样子。

那么这里希望处理一下。

public async Task<IActionResult> CookieLogin(string userName,string returnUrl)
{
var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
identity.AddClaim(new Claim("Name", userName));
await this.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,new ClaimsPrincipal(identity));
// return Redirect(returnUrl);
try
{
return LocalRedirect(returnUrl);
}
catch
{
return Redirect(returnUrl);
}
}

如果发现异常,跳转到首页,避免用户认为我们的网站崩溃现象。

那么如果我们有子站点就是和当前登录页面不是同一域名的情况呢?那么这个时候就需要我们自己验证,尤其是现在的授权认证独立出来服务后。

Uri uri = new Uri(returnUrl);
// 验证一下
// 自我验证,根据数据库列表验证,根据配置验证等
return Redirect(returnUrl);

下一节防跨站脚本攻击。

重新整理 .net core 实践篇————重定向攻击[三十九]的更多相关文章

  1. 重新整理 .net core 实践篇————cookie 安全问题[三十八]

    前言 简单整理一下cookie的跨站攻击,这个其实现在不常见,因为很多公司都明确声明不再用cookie存储重要信息,不过对于老站点还是有的. 正文 攻击原理: 这种攻击要达到3个条件: 用户访问了我们 ...

  2. 重新整理 .net core 实践篇—————领域事件[二十九]

    前文 前面整理了仓储层,工作单元模式,同时简单介绍了一下mediator. 那么就mediator在看下领域事件启到了什么作用吧. 正文 这里先注册一下MediatR服务: // 注册中间者:Medi ...

  3. 重新整理 .net core 实践篇————缓存相关[四十二]

    前言 简单整理一下缓存. 正文 缓存是什么? 缓存是计算结果的"临时"存储和重复使用 缓存本质是用空间换取时间 缓存的场景: 计算结果,如:反射对象缓存 请求结果,如:DNS 缓存 ...

  4. 重新整理 .net core 实践篇——— UseEndpoints中间件[四十八]

    前言 前文已经提及到了endponint 是怎么匹配到的,也就是说在UseRouting 之后的中间件都能获取到endpoint了,如果能够匹配到的话,那么UseEndpoints又做了什么呢?它是如 ...

  5. 重新整理 .net core 实践篇—————配置文件之环境配置[九]

    前言 在当今在互联网微服务比较适用的情况下,docker 可以说一个利器.每次我们打包docker的时候都是适用docker 的配置文件,那么配置文件里面会设置环境变量,这个时候需要我们的应用能够识别 ...

  6. 重新整理 .net core 实践篇—————异常中间件[二十]

    前言 简单介绍一下异常中间件的使用. 正文 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这样写入中间件哈,那么在env环 ...

  7. 重新整理 .net core 实践篇—————Mediator实践[二十八]

    前言 简单整理一下Mediator. 正文 Mediator 名字是中介者的意思. 那么它和中介者模式有什么关系呢?前面整理设计模式的时候,并没有去介绍具体的中介者模式的代码实现. 如下: https ...

  8. 重新整理 .net core 实践篇————配置应用[一]

    前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开. 因为是重新整理,那么就从配置开 ...

  9. centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课

    centos shell编程5  LANMP一键安装脚本 lamp  sed  lnmp  变量和字符串比较不能用-eq  cat > /usr/local/apache2/htdocs/ind ...

随机推荐

  1. Docker Swarm(二)常用命令

    # 管理配置文件 docker config     # 查看已创建配置文件     - docker config ls     # 将已有配置文件添加到docker配置文件中     - dock ...

  2. Linux_配置认证访问FTP服务

    [RHEL8]-FTPserver:[Centos8]-FTPclient !!!测试环境我们首关闭防火墙和selinux(FTPserver和FTPclient都需要) [root@localhos ...

  3. 011.Kubernetes使用共享存储持久化数据

    本次实验是以前面的实验为基础,使用的是模拟使用kubernetes集群部署一个企业版的wordpress为实例进行研究学习,主要的过程如下: 1.mysql deployment部署, wordpre ...

  4. .Net Core自实现CLR异步编程模式(Asynchronous programming patterns)

    最近在看一个线程框架,对.Net的异步编程模型很感兴趣,所以在这里实现CLR定义的异步编程模型,在CLR里有三种异步模式如下,如果不了解的可以详细看MSDN 文档Asynchronous progra ...

  5. 回顾Servlet

    1.新建一个Maven工程当做父工程!pom依赖! <!-- 依赖 --> <dependencies> <dependency> <groupId>j ...

  6. 实现不同VLAN间的通信(单臂路由和链路聚合)

    单臂路由与链路聚合 1.单臂路由 1.1 链路类型 1.2 子接口 2. 链路捆绑 1.单臂路由 是指在路由器的一个接口上通过配置子接口,实现原来相互隔离的不同VLAN(虚拟局域网)之间的互联互通. ...

  7. linux ( crontab 定时任务命令)

    linux ( crontab 定时任务命令)    crontab 定时任务命令 linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工 ...

  8. 2-2.5-3D的室内场景理解

    2-2.5-3D的室内场景理解 主要内容 摘要随着低成本.紧凑型2-2.5-3D视觉传感设备的出现,计算机视觉界对室内环境的视景理解越来越感兴趣.本文为本课题的研究提供了一个全面的背景,从历史的角度开 ...

  9. 深入理解java虚拟机笔记Chapter4

    JDK命令行工具 其中的重中之重是 jstat 命令!而它最常用的参数就是 -gcutil,使用格式如下: jstat -gcutil [pid] [intervel] [count] 输出如下 D: ...

  10. 剑指 Offer 04. 二维数组中的查找

    链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 标签:数组.双指针.二分 题目 在一个 n * m ...