Go语言如何做IP白名单_Go语言IP白名单过滤教程【干货】
应预解析白名单为*net.IPNet切片并用Contains校验结合可信代理链解析X-Forwarded-For获取真实IP避免字符串匹配、DNS查询及未标准化IP导致的误判。Go 里怎么快速判断请求 IP 是否在白名单中直接用 net.ParseIP strings.Contains 或切片遍历别这么干。白名单匹配不是字符串查找得考虑 CIDR比如 192.168.1.0/24、IPv4/v6 兼容、以及高频请求下的性能——尤其是你用 net/http 中间件做校验时每次请求都走一遍线性扫描QPS 上千就明显拖慢。推荐方案预解析 net.IPNet.Contains把白名单字符串提前转成 *net.IPNet 切片运行时只做 O(n) 次 Contains 调用n 是白名单条目数通常很小。白名单配置项如 127.0.0.1、10.0.0.0/8、::1 都要能解析不能只支持点分十进制用 net.ParseCIDR 尝试解析失败则 fallback 到 net.ParseIP 并构造 /32 或 /128 子网注意 net.ParseIP(127.0.0.1).To4() 返回非 nil 才算 IPv4否则可能是 IPv6 映射地址误判会导致放行失败HTTP 中间件里获取真实客户端 IP 的坑直接读 r.RemoteAddr大概率拿到的是反向代理Nginx / ALB的内网 IP不是用户真实出口 IP。白名单校验失效的最常见原因就在这儿。必须按可信代理链逐层检查 X-Forwarded-For但不能无条件信任——否则攻击者伪造 header 就能绕过。立即学习“go语言免费学习笔记深入”只从你明确配置的可信代理 IP如 10.0.0.1、172.16.0.0/12发来的请求中提取 X-Forwarded-For用 strings.Split(r.Header.Get(X-Forwarded-For), ,)[0] 取最左 IP但前提是该请求确实来自可信代理如果请求没经过可信代理比如直连回退到 r.RemoteAddr并用 strings.Split(r.RemoteAddr, :)[0] 剥离端口别忘了用 net.ParseIP 校验提取出的 IP 字符串是否合法非法值直接拒绝避免后续 panic用 map 实现高性能白名单缓存要注意什么如果白名单条目超过 50 条或者你频繁 reload 配置比如从 etcd 动态拉取用切片遍历就有点重了。可以升一级预构建 CIDR → bool 的映射但不能简单用 map[string]bool。 Trenz AI驱动的社交电商营销平台专为TikTok Shop设计
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2495996.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!