首页 > 其他分享 >配置 Forwarded Headers Middleware

配置 Forwarded Headers Middleware

时间:2023-08-03 17:22:27浏览次数:40  
标签:KnownNetworks Forwarded Middleware 配置 中间件 Headers KnownProxies 请求

来自微软的说明:Configure ASP.NET Core to work with proxy servers and load balancers | Microsoft Learn

通过该中间件,会更新:

该中间件不仅处理 Forwarded 请求头,还提供了额外的安全措施。

KnownNetworks 和 KnownProxies 表示有效的中间件地址,如果配置了 KnownNetworks 或者 KnownProxies,则该中间件仅仅处理列出在 KnownNetworks 和 KnownProxies 中的地址,而会忽略掉其它的地址。

ForwardLimit 则限制了处理的地址数量,这意味着不是所有列出在请求头中的地址都一定被处理。

默认配置

  • 在应用和客户端之间仅一个代理存在
  • 只有 loopback 地址作为已知代理地址和已知的网络范围
  • forwarded 请求头的名称为 X-Forwarded-For 和 X-Forwarded-Proto
  • 默认的 Forwardedheaders 的值为 ForwardedHeaders.None,意味着不处理,必须通过配置它来启用中间件。

See: Configure ASP.NET Core to work with proxy servers and load balancers | Microsoft Learn

配置示例

下面的示例中,最多检查 2 个元素,支持的代理服务器是 127.0.0.1 和 127.0.10.1,Forwarded For 的请求头名称使用的是自定义的 X-Forwarded-For-My-Custom-Header-Name。

builder.Services.Configure<ForwardedHeadersOptions>(options => { 
   options.ForwardLimit = 2;
   options.KnownProxies.Add(IPAddress.Parse("127.0.10.1"));
   options.ForwardedForHeaderName = "X-Forwarded-For-My-Custom-Header-Name"; 
});

常用配置说明

KnownNetworks

用来表示有效的网段集合。
它是一个集合类型,其中的元素类型为 IPNetwork.

public System.Collections.Generic.IList
   <Microsoft.AspNetCore.HttpOverrides.IPNetwork> KnownNetworks { get; }yb

这个 IPNetwork 表示一个网段。

这是它的构造函数,可以看到它通过一个前缀的长度来指定网段。

public IPNetwork(IPAddress prefix, int prefixLength) 
   :this(prefix, prefixLength, true)
{
}

例如,默认的配置代码如下:

public IList<IPNetwork> KnownNetworks { get; } 
   = new List<IPNetwork>() { 
      new IPNetwork(IPAddress.Loopback, 8) 
     };

表示只要是 127.x.x.x 的网段,8 指的是 8 位,即第一个字节。也就是 127 所在的部分。

KnownProxies

表示有效的代理集合,其中的元素类型为 IpAddress,即单个的网络地址。

例如,默认的配置代码如下:

public IList<IPAddress> KnownProxies { get; } 
   = new List<IPAddress>() { 
      IPAddress.IPv6Loopback 
     };

ForwardLimit

限制中间件处理的在 X-Forwarded- 中的地址数量,默认为 1 个。

默认的配置如下:

public int? ForwardLimit { get; set; } = 1;

通过设置为 null 可以禁用该限制,但是这必须在配置了 KnownProxies 和 KnownNetworks 之后。配置为非 null 的值是一种安全预防措施 (但不是保证),用来防止配置错误的代理,和来自网络上游的恶意请求。

处理的顺序是从右向左的相反顺序进行的,如果使用默认值 1,则仅仅处理请求头中最右边的值。

标签:KnownNetworks,Forwarded,Middleware,配置,中间件,Headers,KnownProxies,请求
From: https://www.cnblogs.com/haogj/p/17603897.html

相关文章

  • 请求头详解——Headers
    请求头定义:客户端,即浏览器通过输入url后确定等于做了一次向服务器的请求动作,在这个请求里面带有请求参数,请求参数的集合即为请求头。请求头的参数(常用的):Accept:浏览器可接收的文件类型Accept-Charset:浏览器可以接收的编码类型Accept-Encoding:浏览器可以接收的压缩编码类型Ac......
  • X-Forwarded-For 客户端 IP 伪造过程及防范
    单号:【ID:1184794】【安全漏洞】【运营管理平台】【中危】存在IP地址伪造漏洞问题:漏洞名称:存在IP地址伪造漏洞漏洞等级:中危关联bug:漏洞描述:  应用系统存在IP地址伪造漏洞,攻击者可通过修改HTTP请求包伪造IP地址绕过IP地址限制,访问或执行系统相关功能。漏洞功能点:  ......
  • ASP.NET Core 授权中间件 AuthorizationMiddleware
    ///<summary>///Amiddlewarethatenablesauthorizationcapabilities.///</summary>publicclassAuthorizationMiddleware{//AppContextswitchusedtocontrolwhetherHttpContextorendpointispassedasaresourcetoAuthZ......
  • django之中间件(middleware)
    目录django之中间件(middleware)django默认中间件django中间件原理中间件程序结构自定义中间件中间件程序执行顺序字符串列表注册原理importlib模块模块对象的反射仿django配置文件注册自定义中间件两个常见的自定义方法process_requestprocess_response三个了解的自定义方法django......
  • axios headers设置发送接收文件类型
    接受blobexportfunctionexportTeacherActivitiesState(data:any):Promise<IResponse<Blob>>{ returnrequest({  baseURL,  url:"/Api/CourseEvaluationManage/ActivityStatistics/ExportTeacherActivitiesState",  method:"post......
  • ASP.NET Core 中间件 中间件(Middleware)和过滤器(Filter)的区别
    前言在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的HelloWorld,如果你觉得本篇文章对你有用的话,不妨点个【推荐】。目录中间件(Middleware)的作用中间件的运行方式中间件(Middleware)和过......
  • Scrapy设置headers、cookies
    在setting.py文件中添加cookies与headers---最简单的方法settings文件中给Cookies_enabled=False和DEFAULT_REQUEST_HEADERS解注释在settings的DEFAULT_REQUEST_HEADERS配置的cookie就可以使用了推荐使用这种方法,因为可以用shell进行调试样例:......
  • 自写爬虫工具——transfer-headers
    transfer-headers,转换请求头这两天趁有时间浅学了一下易语言,之前一直用python写工具,但python写启动软件慢,而且编译文件太大,易语言学的很浅,用中文写很不习惯,==因为经常做爬虫,经常要把请求头转换到python/代码里,每次做重复工作浪费时间,就自己写了这么个小工具,有的人会说,转换成、......
  • SAP Fiori Tools 的 Application Reload Middleware 介绍
    通过applicationreloadmiddleware的帮助,开发者可以在进行FioriElements开发的过程中,即时预览这些尚未完全完成开发的应用。即时的意思是,一旦有FioriElements项目相关的文件发生变化,ApplicationReloadmiddleware会自动刷新应用。npx是一个Node.js工具,它可以让......
  • SpringCloud gateway HttpHeadersFilters
    HttpHeadersFilter在将请求发送到下游之前应用于请求,例如在NettyRoutingFilter中。1、ForwardedHeadersFilterForwardedHeadersFilter创建一个Forwarded标头以发送到下游服务。它将当前请求的Host标头、scheme和端口添加到任何现有的Forwarded标头中。2、RemoveHopByHopH......