【微服务】06-安全问题

文章目录

    • 1.反跨站请求伪造
      • 1.1 攻击过程
      • 1.2 攻击核心
      • 1.3 如何防御
      • 1.4 使用AntiforgeryToken机制来防御用到的类
    • 2. 防开发重定向共计
      • 2.1 攻击过程
      • 2.2 攻击核心
      • 2.3 防范措施
    • 3.防跨站脚本
      • 3.1 攻击过程
      • 3.2 防范措施
    • 4.跨域请求
      • 4.1 同源与跨域
      • 4.2 CORS过程
      • 4.2 CORS是什么
      • 4.3 CORS请求头
      • 4.4 CORS响应头
      • 4.5 默认支持的Expose Headers

1.反跨站请求伪造

1.1 攻击过程

在这里插入图片描述

1.2 攻击核心

  • 用户已经登录"好站点"
  • "好站点"通过Cookie存储和传递身份信息
  • 用户访问了"坏站点"

1.3 如何防御

  • 不使用Cookie来存储和传输身份信息,使用JWT认证
  • 使用AntiforgeryToken机制来防御
  • 避免使用Get作为业务操作的请求方法

浏览器每次请求都会携带Cookie,这是我们控制不了的,而Jwt的Token则需要在同域下的脚本才能发起,需要在同域下运行脚本从token的存储里面去获取的,比如localstorage这样的存储

1.4 使用AntiforgeryToken机制来防御用到的类

  • ValidateAntiForgeryToken
  • AutoValidateAntiforgeryToken
// startup
public void ConfigureServices(IServiceCollection services)
{// 防止跨站请求伪造的策略配置services.AddAntiforgery(options =>{options.HeaderName = "X-CSRF-TOKEN";//});
}// 开启全局AntiForgeryToken验证
//services.AddMvc(options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()));

如果不希望全局开启AntiForgeryToken验证,可以在API上通过特性设置

[Authorize]
[ValidateAntiForgeryToken]//这里进行AntiForgeryToken验证
public IActionResult CreateOrder(string itemId, int count)
{...
}

2. 防开发重定向共计

2.1 攻击过程

在这里插入图片描述

2.2 攻击核心

  • “好站点”的重定向未验证目标URL
  • 用户访问了“坏站点”

2.3 防范措施

  • 使用LocalRedirect来处理重定向
  • 验证重定向的目标域名是否合法

LocalRedirect处理的重定向仅限于本站,也就是它的重定向不能跨站,所以不会重定向到坏站点

[HttpPost]public async Task<IActionResult> Login([FromServices]IAntiforgery antiforgery, string name, string password, string returnUrl){HttpContext.Response.Cookies.Append("CSRF-TOKEN", antiforgery.GetTokens(HttpContext).RequestToken, new Microsoft.AspNetCore.Http.CookieOptions { HttpOnly = false });var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);//一定要声明AuthenticationSchemeidentity.AddClaim(new Claim("Name", "小王"));await this.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity));if (string.IsNullOrEmpty(returnUrl)){return Content("登录成功");}try{// 使用LocalRedirect处理,如果出现异常,重定向到首页,避免站点跳转到外部站点// 如果我们需要跳转到其它站点时,我们需要验证returnUrl合法性,然后使用Redirect进行跳转return LocalRedirect(returnUrl);}catch{return Redirect("/");}//return Redirect(returnUrl);}

3.防跨站脚本

3.1 攻击过程

在这里插入图片描述

3.2 防范措施

  • 对用户提交内容进行验证,拒绝恶意脚本
  • 对用户提交的内容进行编码UrlEncoder,JavaScriptEncoder
  • 慎用HtmlString和HemlHelper.Raw
  • 身份信息Cookie设置为HttpOnly
  • 避免使用Path传递带有不受信的字符,使用Query进行传递
public void ConfigureServices(IServiceCollection services)
{services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>{options.LoginPath = "/home/login";options.Cookie.HttpOnly = true;});
}

4.跨域请求

4.1 同源与跨域

  • 方案相同(HTTP/HTTPS)
  • 主机(域名)相同
  • 端口相同

如果方案、主机(域名)、端口这个三个都相同则认为两个域名是同源的,如果三者中有任意一个不同,则认为请求是跨域的

4.2 CORS过程

在这里插入图片描述

浏览器发起了一个请求,访问了abc.com的网站,网站给予返回响应,那么浏览器当前就处于abc.com这个主域名下。这时如果向efg.com网站发起一个http ajax请求,这时则认为这是一个跨域请求。
浏览器在发起跨域请求前会向efg.com发起一个基于HTTP option的预检请求,efg.com收到预检请求后,会根据当前预检请求的一些信息,如主域,header,身份认证信息等,去判断是否允许跨域请求;如果efg.com允许发起跨域请求,浏览器会正式地向efg.com发起我们要求的跨域请求,这时efg.com会响应正常的页面Api信息

4.2 CORS是什么

  • CORS是浏览器允许跨域发起请求“君子协定”
  • 它是浏览器行为协议
  • 它并不会让服务器拒绝其它途径发起的HTTP请求
  • 开启时需要考虑是否存在被恶意网站工具的情形

CORS影响的是浏览器是否允许在其它域下面通过脚本来发起跨域的请求

4.3 CORS请求头

  • Origin请求源 ⇒ 指的是当前主域的地址
  • Access-Control-Request-Method ⇒ 希望的请求方法
  • Access-Control-Request-Headers ⇒ 希望请求发起的请求头

4.4 CORS响应头

  • Access-Control-Allow-Origin ⇒ 是否允许跨域
  • Access-Control-Allow-Credentials ⇒ 是否允许携带认证信息,如cookie 信息
  • Access-Control-Expose-Headers ⇒ 是否允许跨域请求的脚本访问到响应头,默认情况会暴露一些默认的头部信息
  • Access-Control-Max-Age ⇒ 跨域响策略时间
  • Access-Control-Allow-Methods ⇒ 允许的Http方法
  • Access-Control-Allow-Headers ⇒ 允许的header

4.5 默认支持的Expose Headers

  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma
// startup
public void ConfigureServices(IServiceCollection services)
{services.AddCors(options =>{options.AddPolicy("api", builder =>{// WithOrigins允许跨域的源//AllowAnyHeader 允许发起任何header// AllowCredentials 允许身份认证,发起的请求会自动携带域下面的cookie信息// WithExposedHeaders 设置脚本允许访问的响应header列表builder.WithOrigins("https://localhost:5001").AllowAnyHeader().AllowCredentials().WithExposedHeaders("abc");// 允许跨域的源设置为任意,builder.SetIsOriginAllowed(orgin => true).AllowCredentials().AllowAnyHeader();});});
}// 设置中间件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{...app.UseCors();// 注册尽量靠前,放在routing之后
}// 使用
[Authorize]
[HttpPost]
[EnableCors("api")]// 也可以设置在Controller上
//[DisableCors] //不允许跨域
public object PostCors(string name)
{return new { name = name + DateTime.Now.ToString() };
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/109761.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iTubeGo for Mac视频下载器

iTubeGo YouTube Downloader是一款功能强大的YouTube视频下载工具&#xff0c; 它具有以下特色&#xff1a; 多种格式支持&#xff1a;iTubeGo YouTube Downloader可以将YouTube视频下载为多种常见的视频和音频格式&#xff0c;包括MP4、MP3、AVI、FLV、MOV、WMV等&#xff0c…

C语言每日一题 ---- 打印从1到最大的n位数(Day 1)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C语言天天练 &#x…

基于Java+SpringBoot+Vue前后端分离智慧图书管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

C++day6(多态实现动物园的讲解员和动物表演的相关介绍、用函数模板实现不同数据类型的交换功能)

1.比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲解员&#xff0c;他会为每种动物表演做简单的介绍。 在这个场景中&#xff0c;我们可以将动…

开始MySQL之路——外键关联和多表联合查询详细概述

多表查询和外键关联 实际开发中&#xff0c;一个项目通常需要很多张表才能完成。例如&#xff0c;一个商城项目就需要分类表&#xff0c;商品表&#xff0c;订单表等多张表。且这些表的数据之间存在一定的关系&#xff0c;接下来我们将在单表的基础上&#xff0c;一起学习多表…

飞天使-k8s基础组件分析-持久化存储

文章目录 emptyDirhostpathpv和pvc介绍nfs作为静态pv案例nfs作为动态pv案例使用本地文件夹作为pv改变默认存储类及回收策略参考文档 emptyDir 重启文件还有&#xff0c;但是如果杀了进程&#xff0c;则会丢失文件 创建pod # kubectl apply –f redis.yaml校验pod是否处于运行&…

合宙Air724UG LuatOS-Air LVGL API控件--按钮 (Button)

按钮 (Button) 按钮控件&#xff0c;这个就不用多说了&#xff0c;界面的基础控件之一。 示例代码 – 按键回调函数 event_handler function(obj, event) if event lvgl.EVENT_CLICKED then print(“Clicked\n”) elseif event lvgl.EVENT_VALUE_CHANGED then print(“To…

嵌入式系统存储体系

一、存储系统概述 主要分为三种&#xff1a;高速缓存&#xff08;cache&#xff09;、主存和外存。 二、高速缓存Cache 高速缓冲存储器中存放的是当前使用得最多得程序代码和数据&#xff0c;即主存中部分内容的副本&#xff0c;其本身无自己的地址空间。在嵌入式系统中Cac…

人工智能在机器学习中的八大应用领域

文章目录 1. 自然语言处理&#xff08;NLP&#xff09;2. 图像识别与计算机视觉3. 医疗诊断与影像分析4. 金融风险管理5. 预测与推荐系统6. 制造业和物联网7. 能源管理与环境保护8. 决策支持与智能分析结论 &#x1f389;欢迎来到AIGC人工智能专栏~探索人工智能在机器学习中的八…

深度学习-4-二维目标检测-YOLOv3理论模型

单阶段目标检测模型YOLOv3 R-CNN系列算法需要先产生候选区域&#xff0c;再对候选区域做分类和位置坐标的预测&#xff0c;这类算法被称为两阶段目标检测算法。近几年&#xff0c;很多研究人员相继提出一系列单阶段的检测算法&#xff0c;只需要一个网络即可同时产生候选区域并…

【C++ 学习 ⑰】- 继承(下)

目录 一、派生类的默认成员函数 二、继承与友元 三、继承与静态成员 四、复杂的菱形继承及菱形虚拟继承 五、继承和组合 一、派生类的默认成员函数 派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认构造函数&#xff0c;那么必须在派生…

HPC是如何助力AI推理加速的?

高性能计算&#xff08;High-Performance Computing&#xff0c;HPC&#xff09;通过提供强大的计算能力、存储资源和网络互联&#xff0c;可以显著地辅助人工智能&#xff08;AI&#xff09;应用更快地进行训练和推断。那么&#xff0c;HPC是如何助力AI推理加速的&#xff1f;…

多线程学习之生产者和消费者与阻塞队列的关系

生产者和消费者 概述&#xff1a; 生产者消费者问题&#xff0c;实际上主要是包含了两类线程&#xff1a; 生产者线程用于生产数据消费者线程用于消费数据 生产者和消费者之间通常会采用一个共享的数据区域&#xff0c;这样就可以将生产者和消费者进行解耦&#xff0c; 两…

在线OJ平台项目

一、项目源码 Online_Judge yblhlk/Linux课程 - 码云 - 开源中国 (gitee.com) 二、所用技术与开发环境 1.所用技术: MVC架构模式 (模型&#xff0d;视图&#xff0d;控制器) 负载均衡系统设计 多进程、多线程编程 C面向对象编程 & C 11 & STL 标准库 C Boost 准标…

材料空间「填空解谜」:MIT 利用深度学习解决无损检测难题

内容一览&#xff1a;材料检测在工程、科学及制造业中扮演着至关重要的角色。传统的材料检测方法&#xff0c;例如切割和化学试剂检测具有破坏性&#xff0c;同时较为耗费时间和资源。近期&#xff0c;MIT 科学家利用深度学习开发了一种技术&#xff0c;能够填补缺失信息&#…

certbot-https证书自动续期

certbot是一个免费的开源项目是EFF的一部分&#xff0c;自动化的工具&#xff0c;用于帮助管理和续期SSL/TLS证书。它可以安装、配置和自动续期证书。 1、安装 snapd 将 EPEL 存储库添加到您的 CentOS 安装中。输入y回车继续安装 sudo yum install snapd; sudo systemctl en…

无人机巡检输电线路是什么,怎么巡?

在今日科技迅速发展的时代&#xff0c;无人机为输电线路巡检提供了一种高效、安全且准确的解决方案。那么&#xff0c;为什么无人机巡检输电线路如此关键呢&#xff1f;以下是对这一问题的深入剖析。 1. 提高工作效率 传统的巡检模式与现实挑战&#xff1a;在过去&#xff0c;输…

6. 激活层

6.1 非线性激活 ① inplace为原地替换&#xff0c;若为True&#xff0c;则变量的值被替换。若为False&#xff0c;则会创建一个新变量&#xff0c;将函数处理后的值赋值给新变量&#xff0c;原始变量的值没有修改。 import torch from torch import nn from torch.nn import …

专访 Hyper Oracle:可编程的 zkOracle 打造未来世界的超算

许多 Web3 应用在实现的过程中&#xff0c;常常会遇到基础设施方面的限制&#xff0c;包括去中心化自动化、预言机、链上信息搜索等问题。绝大部分区块链的中间件网络都是依赖于节点质押来保证节点执行的诚实性&#xff0c;这样的模式会产生诸多衍生问题&#xff0c;例如安全性…

VScode使用SSH连接linux

1、官网下载和安装软件 https://code.visualstudio.com/Download 2、安装插件 单击左侧扩展选项&#xff0c;搜索插件安装 总共需要安装的插件如下所示 3、配置连接服务器的账号 安装完后会在左侧生成了远程连接的图标&#xff0c;单击此图标&#xff0c;然后选择设置图标…