You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js/Express中使用req.ip获取用户IP地址是否为最佳实践?

Node.js/Express 获取用户IP方案说明

你当前使用的const ipAddress = String(req.ip || "unknown");不是通用的最优方案,确实存在IP被篡改的可能性,具体要看你的服务部署场景。

核心原理说明

  • 如果你的Express服务直接对公网暴露,没有前置反向代理/CDN/负载均衡,那直接用req.ip是安全的:这时候req.ip取的是TCP连接的远端IP,无法被用户篡改。
  • 如果你的服务前面有反向代理层,默认配置下req.ip拿到的是代理服务器的IP,不是用户真实IP;如果配置不当开启了信任代理,还可能拿到用户伪造的假IP。

正确实现方案

  1. 首先配置Express的trust proxy参数,不要直接设为true,要填入你实际部署链路中信任的代理IP段,避免伪造风险:
    // 仅信任本机的反向代理(比如本地部署的Nginx)
    app.set('trust proxy', '127.0.0.1');
    
    // 信任多个固定代理IP/IP段
    app.set('trust proxy', ['127.0.0.1', '10.0.0.0/24', '你的CDN出口IP段']);
    
  2. 配置完成后再使用req.ip取值,这时候Express会自动过滤信任代理的IP,从X-Forwarded-For头中提取真实的用户IP,不会被用户自行篡改的请求头影响。
  3. 如果需要更可控的自定义逻辑,也可以根据你的代理层数手动提取:比如只有一层Nginx代理的情况下,可以手动取X-Forwarded-For头的最后一段IP,对应真实用户的连接IP。

避坑提醒

绝对不要在没有配置信任代理的情况下,直接提取X-Forwarded-For、X-Real-IP这类请求头的第一个值,这类头用户可以任意修改,完全不可信。


内容的提问来源于stack exchange,提问作者Gary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:15:03