gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:50:37 27 4
gpt4 key购买 nike

根据CloudFront的文档
(https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html),客户端IP可以是X-Forwarded-For header 的前端,中间,结尾。

严厉吗?那我该如何获得真实的客户端IP?

最佳答案

Is it right?



不完全是。

CloudFront遵循 X-Forwarded-For的正确语义。具体来说,每个处理请求的系统都会在右侧附加其客户地址。这意味着来自CloudFront的请求中 X-Forwarded-For中最右边的地址始终是连接到CloudFront的计算机的地址。

如果客户端(与CloudFront建立连接的计算机)在其请求中包含 X-Forwarded-For header ,则该 header 可能是伪造的,或者如果客户端是代理服务器,则该 header 可能是合法的,但是您很少有办法知道。因此,无论哪种方式,您都应该将其视为潜在有值(value)的内容,但严格来说是非权威的。

最右边的值(也可能是唯一的值)是您可以信任的来自CloudFront的请求中的唯一值。

一般来说,从右边进行解析,您可以知道的任何您知道的并且可以信任的地址(可以正确识别出其上游客户端)都可以从列表中删除...但是一旦遇到第一个不受信任的地址(从右到左),您便可以使用该地址。正在寻找,因为该地址左侧的任何内容都不受信任。

这意味着,如果堆栈中的组件(例如Application Load Balancer或Web服务器)也添加了 X-Forwarded-For,那么您将需要考虑这些组件还将添加到值右侧的内容,从而修改CloudFront提供的内容。

例如。客户发送:
X-Forwarded-For: a, b, c

CloudFront添加客户端的IP d:
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

您可以信任和删除 f,只要它与您的平衡器子网的CIDR范围相同即可。

您可以信任和删除 e,只要它在CloudFront address ranges中即可。

剩下的就是 d作为客户端地址。

在此示例中, abc值几乎一文不值,因为您无法信任它们的真实性,因为它们位于第一个(从右侧)不可信地址的左侧...有时,它们可能在鉴识上有用,稍后,但是您不能基于它们做出任何实时决策。

这就是 X-Forwarded-For始终起作用的方式。由于缺乏理解,许多开发人员似乎做出了幼稚的假设。在将其用于任何重要事项之前,请务必先了解它。

Lambda@Edge触发器中,CloudFront以 event.Records[0].cf.request.clientIp为您提供客户端IP地址。这始终只是一个地址,并且与 X-Forwarded-For的最右边的值相同,因为请求使CloudFront一直指向您的来源(如上所述,这可能会在右边添加其他值)。

关于amazon-cloudfront - 如何通过CloudFront获取请求的客户端IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51393782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com