当前位置: 首页 > 知识库问答 >
问题:

如何通过CloudFront获取请求的客户端IP?

皇甫浩壤
2023-03-14

根据CloudFront的文档(https://docs.aws.amazon.com/amazoncloudfront/latest/developerguide/requestandresponseBehaviorCustomOrigin.html),客户端IP可以是x-forward-for头的前面、中间和结尾。

是Rignt吗?那我怎么才能得到真正的客户端IP呢?

共有1个答案

茅慈
2023-03-14

对吗?

不完全是。

CloudFront遵循x-forward-for的正确语义。具体地说,每个处理请求的系统都将其客户端的地址追加到右侧。这意味着CloudFront请求中x-forward-for中最右边的地址始终是连接到CloudFront的机器的地址。

一般来说,从右边解析,任何你已知的,并且被信任已经正确识别了其上游客户端的地址都可以从列表中移除...但一旦遇到第一个不信任的地址,从右到左,这就是您要查找的地址,因为该地址左边的任何东西都不可信。

这意味着,如果堆栈中的组件(如应用程序负载平衡器或web服务器)也在添加x-forward-for,那么您需要说明这些组件还在值的右侧添加了哪些内容,修改CloudFront提供的内容。

例如。客户端发送:

X-Forwarded-For: a, b, c

CloudFront添加客户端的IPD:

X-Forwarded-For: a, b, c, d

ALB接收到来自CloudFront的请求,因此它添加了CloudFront出口地址e:

X-Forwarded-For: a, b, c, d, e

然后您的web服务器添加平衡器f的内部地址:

X-Forwarded-For: a, b, c, d, e, f

这将使您使用D作为客户端地址。

ABC在本例中几乎没有价值,因为您不能信任它们的真实性,因为它们位于第一个不可信地址(从右起)的左侧...偶尔,他们可能是有用的,稍后,但您不能作出任何实时决策的基础上,他们。

这就是x-forwarded-for始终工作的方式。许多开发人员似乎由于缺乏理解而做出天真的假设。在你用它做任何重要的事情之前,一定要了解它。

 类似资料:
  • 我的安全配置有问题,我需要创建一个访问我的应用程序的IP列表。 我的问题是以动态的方式为我的所有应用程序请求获取Ip。但是我不想为我的应用程序的所有请求添加一个HttpServletRequest,我想要的是一个在每个请求之前调用的方法,甚至在SecurityConfig事件之前。 我尝试在我的控制器类中自动生成它,但我的应用程序没有执行。我该怎么做才能让这件事成功?

  • 问题内容: 我有一个传入的对象。如何找到发出请求的客户端的 IP ?我浏览了的大多数方法和属性,似乎错过了一些东西。 问题答案: (来自RequestHandler的实例) 您可以像这样检查响应:

  • 客户端的HTTP/HTTPS请求。 进程:主进程​ ClientRequest是由EventEmitter来实现Writable Stream​ new ClientRequest(options) 作用:发起新的HTTP/HTTPS请求 options(Object | String) - options是String时即请求URL。 options 是Object时则按以下属性请求: meth

  • 问题内容: 说我使用这样的代码: 如何查看已将什么json请求发送到Elasticsearch? 问题答案: 在Elastic4s 1.6.2中,您可以对多个请求使用show typeclass以获得JSON等值。 这很简单。 该方法将呈现JSON输出。它适用于大多数请求类型。 在Elastic4s 5.2.0+中,您可以在客户端上使用该方法。

  • 网页通过http接口请求,如何获取用户内网ip?

  • httplib 库主要用来模拟客户端发送 HTTP 请求,类似于 Curl 工具,支持 JQuery 类似的链式操作。使用起来相当的方便;通过如下方式进行安装: go get github.com/astaxie/beego/httplib 如何使用 首先导入包 import ( "github.com/astaxie/beego/httplib" ) 然后初始化请求方法,返回对象 r