小谈X-Forwarded-For

实际开发中我们经常会需要获取用户的ip地址,http的请求头X-Forwarded-For一般能为我们达到此目的。

X-Forwarded-For 请求头格式:(示例如下)

X-Forwarded-For: ip0, ip1, ip2

这个 就表示用户真实ip地址为ip0,然后经过ip1的代理和ip2的代理才请求过来的。最后一层的代理是没有在X-Forwarded-For中出现的,最后一层代理的ip地址可以通过 Remote Address 来获取,这个 Remote Address 是用于tcp三次连接的无法伪造。

结论:

  • 直接对外提供服务的 Web 应用,在进行与安全有关的操作时,只能通过 Remote Address 获取 IP,不能相信任何请求头;
  • 使用 Nginx 等 Web Server 进行反向代理的 Web 应用,在配置正确的前提下,要用 X-Forwarded-For 最后一节 或 X-Real-IP 来获取 IP(因为 Remote Address 得到的是 Nginx 所在服务器的内网 IP);同时还应该禁止 Web 应用直接对外提供服务;
  • 在与安全无关的场景,例如通过 IP 显示所在地天气,可以从 X-Forwarded-For 靠前的位置获取 IP,但是需要校验 IP 格式合法性;

注意的地方
直接对外发布服务的话,用户是可以伪造X-Forwarded-For字段内容的,但是经过nginx这种服务器的转发加工处理(反向代理),一般都是可以通过nginx获取到真实ip地址(X-Forwarded-For字段的最后一节的内容)的。

本博客内容借鉴于一篇优秀的博客介绍

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值