代理运行的前提是它们存在将请求从一个系统转发到另一个系统。 它们通常会增加一些价值 - 否则它们就不会处于中间 - 例如负载均衡(规模)、数据防泄露(安全性)或压缩(性能)。
事实是,客户端发送的请求不经修改就被传递到目标目的地。
这就是事情可能变得危险的地方。 今天,我们发现通过代理交付的所有应用程序中超过一半都使用了X-Forwarded-For。 56%的真实、实时应用程序都在使用它,这使得它成为一份相当重要的数据。 X-Forwarded-For 是自定义 HTTP 标头,它携带客户端的原始IP 地址,以便另一端的应用程序知道它是什么。 否则它只会看到代理 IP 地址,这会让一些应用程序感到不满。
这是因为很多应用依赖于了解客户端的实际 IP 地址来帮助防止欺诈和实现访问。 如果您最近从非常用设备登录了您的银行账户、Gmail 账户或 Xbox 账户(嘿, Minecraft就驻扎在这里,好吗?),您可能会收到安全警告。 因为您的登录位置信息也会被跟踪,部分原因是为了检测企图欺诈和滥用。
您的实际 IP 地址还用于在某些系统中允许或拒绝访问,并作为推断您的实际位置的一种手段。 这就是为什么那些电子邮件警告经常包括“你是从保加利亚登录的吗?”
一些系统还使用 X-Forwarded-For 来强制访问控制。 例如,WordPress 使用 .htaccess 文件根据 IP 地址允许访问。 不,这不是最好的解决方案,但它是一种常见的解决方案,你至少要对他们提供一些应用程序保护以防止滥用的努力表示赞赏。
无论这是否是个好主意,如果您要使用 X-Forwarded-For 作为身份验证或授权方案的一部分,您应该尽最大努力确保它实际上是真正的客户端 IP 地址。 它是整体安全方程中最常用的因素之一;它既保护消费者利益,也保护企业利益。
但是如果您盲目地接受客户端在该标头中发送的任何内容,则可能会允许某人欺骗该值,从而绕过旨在防止非法访问的安全机制。 毕竟,我可以通过编写几行代码或抓取众多 Chrome 插件之一来欺骗任何我想要的东西,这些插件使我能够轻松操纵 HTTP 标头。
确保获取实际IP 地址的方法之一是不信任用户输入。 是的,又出现了那个“零安全规则” 。 永远不要相信用户输入。 我们知道 HTTP 标头是用户输入,无论它们是否显示出来。
如果您已经有代理,那就太好了。 如果没有的话,你应该买一个。 因为这就是您提取并在 X-Forwarded-For 中放置正确值并阻止欺骗者追踪的方式。
基本上,您希望您的代理能够到达请求并找到隐藏在其 IP 数据包中的实际 IP 地址。 一些代理可以通过配置或策略来做到这一点,其他代理则需要一些编程魔法。 不管怎样,您都会将这个值放入 X-Forwarded-For HTTP 标头中,然后照常进行。 这样做可确保应用程序或下游服务拥有准确的信息来做出决策,包括有关访问和授权的决策。
对于大多数架构和情况来说,这将减轻使用欺骗性的 X-Forwarded-For 获取未授权访问的可能性。 与往常一样,您掌握的信息越多,对客户及其合法性的了解就越准确,您的安全性就越好。 将 IP 地址(在 X-Forwarded-For 中)与设备类型、用户代理以及 HTTP 和网络协议中自动携带的其他信息相结合,可以提供更为强大的环境以便做出明智的决策。
注意安全!
处理 X-Forwarded-For 的资源: