码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • .NET 反向代理 YARP 跨域请求 CORS


    合集 - .NET(21)
    1..NET Core 环境搭建2022-03-162..Net Core IOC DI(依赖注入)2022-03-163..NET Core 读取配置技巧 - IOptions 接口2022-05-254..Net Core 依赖注入(IOC) 一些简单的使用技巧2022-05-065..Net Core 可为Null的类型2022-04-026..Net Core 配置文件 appsettings.json2022-03-257..NET 反向代理-YARP 部署Https(SSL)2022-09-218..NET 反向代理-YARP 根据域名转发2022-09-219..NET 7 来了!!!2022-09-1910..NET 反向代理-YARP2022-09-0711..Net Core 配置文件读取 - IOptions、IOptionsMonitor、IOptionsSnapshot2022-09-0212..NET Core 实现后台任务(定时任务)Longbow.Tasks 组件(三)2022-07-2313..NET Core 实现后台任务(定时任务)BackgroundService(二)2022-07-1314..NET Core 实现后台任务(定时任务)IHostedService(一)2022-07-0815..Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute2022-10-0716..NET 反向代理 YARP 代理 GRPC2022-09-2817..Net 7 C#11 原始字符串2022-09-26
    18..NET 反向代理 YARP 跨域请求 CORS2022-09-26
    19..NET 反向代理 YARP 自定义配置提供程序(Configuration Providers)2022-09-2520..NET 反向代理 YARP 通过编码方式配置域名转发2022-09-2421..NET 部署 多域名 Https(SSL)通过代码方式2022-09-23
    收起

      使用过 nginx 的小伙伴应该都知道,这个中间件是可以设置跨域的,作为今天的主角,同样的 反向代理中间件的 YARP 毫无意外也支持了跨域请求设置。

      有些小伙伴可能会问了,怎样才算是跨域呢?

      在 HTML 中,一些标签,例如 img、a 等,还有我们非常熟悉的 Ajax,都是可以指向非本站的资源的,那什么是非本站呢,不同域名、不同端口、还有 http和 https,其中一个不一样,都是属于跨域请求。

      简单来说,就是 协议 + 域名 + 端口号,三者一致为同域,否则跨域。

    ​   而因为跨域可能会被利用进行 CSRF 攻击,做过安全扫描的应该对这个非常熟悉,除非被请求站点允许跨域请求,否则浏览请将会限制这些请求,而什么是 CSRF 攻击呢,下面我摘抄一段介绍:


     

      跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

    攻击细节

      跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
    例子
      假如一家银行用以运行转账操作的URL地址如下:http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
    那么,一个恶意攻击者可以在另一个网站上放置如下代码:
    如果有账户名为Alice的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失1000资金。
    这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。
      透过例子能够看出,攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户浏览器,让其以用户的名义运行操作。
     

      言归正传,我们来看看 YARP 是怎么实现 CORS 的:

    1、在配置中设置跨域策略

    复制代码
    {
      "ReverseProxy": {
        "Routes": {
          "route1" : {
            "ClusterId": "cluster1",
            "CorsPolicy": "customPolicy",//跨域策略名称,具体策略需要在代码中编写,名称大小写不敏感
            "Match": {
              "Hosts": [ "localhost" ]
            },
          }
        },
        "Clusters": {
          "cluster1": {
            "Destinations": {
              "cluster1/destination1": {
                "Address": "https://localhost:10001/"
              }
            }
          }
        }
      }
    }
    复制代码

      我翻阅了资料,发现这个非常的无语(当然可能是我没找到,有新发现的大佬请告知一下我),配置中只是指定了跨域策略的名称,具体的策略内容却没有,而是需要在代码里面编写,实际上的处理,还是在 CORS 中间件上处理,还真的是能少造轮子就少造(当然,我是非常支持这样的理念的)。

    2、在 Startup 中编写策略

    Startup.cs ConfigureServices

    复制代码
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("customPolicy", builder =>
            {
                builder.AllowAnyOrigin();
            });
        });
    }
    复制代码

      千万别忘了在请求管道里也要加上 Cors 中间件噢,需要注意的是 要在 Routing 中间件后加上

    复制代码
    public void Configure(IApplicationBuilder app)
    {
        app.UseRouting();
    
        app.UseCors();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapReverseProxy();
        });
    }
    复制代码

      具体 cors 怎么用,我就不一一说了,感兴趣的可以到官方文档上看看,传送门

      感谢大佬们的观看,我们下次再见,拜拜!

    原文链接:https://www.cnblogs.com/ysmc/p/16729550.html

  • 相关阅读:
    开发那些事儿:利用C++下载视频及记录到数据库,出现数据库报错该如何解决?
    Android NDK篇-C++虚函数、纯虚函数、完全纯虚函数与模板函数
    答粉丝问)【问题记录&解决】Python & MySQL:备份和恢复、灾难恢复方法(附代码) | 如何实现前端连python 后端传数据,生成前端折线图,echarts?
    【Redis】字符串sds
    你觉得工作开心重要还是赚钱重要?
    计算机算法分析与设计(18)---回溯法(介绍、子集和问题C++代码)
    深入理解C++内存管理
    史上最全的字节跳动 Java 面试题集锦,高级 Java 工程师面试技术
    数据挖掘实战应用案例精讲-【概念篇】数据湖(补充篇)(Data Lake )
    洛谷 P7018 [CERC2013] Bus
  • 原文地址:https://www.cnblogs.com/ysmc/p/16729550.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号