当前位置: > > > > 在Go gin中实现IP限制
来源:stackoverflow
2024-04-26 20:03:35
0浏览
收藏
对于一个Golang开发者来说,牢固扎实的基础是十分重要的,就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《在Go gin中实现IP限制》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!
问题内容
我正在设置一个小型演示应用程序,目前只能从我的家庭 IP 地址访问,也许我会与一小部分技术人员进行协调和共享。
我查看了这里的自述文件,但找不到: https://github.com/gin-gonic/gin
—关于如何将应用程序的访问限制为 gin 中的特定 IP 地址的规范、最小示例是什么?
(另外,这在 2018 年是一个特别不安全的想法,有什么理由吗?)
解决方案
在回答您的问题之前,我想说的是,使用防火墙规则而不是程序本身来限制对应用程序的访问可能更实际,但我离题了。
为了回答你的问题,在查看了 gin 后,我发现 包含一个 clientip()
方法:
实现了尽力而为的算法来返回真实的客户端ip,它解析x-real-ip和x-forwarded-for,以便与反向代理(例如nginx或haproxy)正常工作。在 x-real-ip 之前使用 x-forwarded-for,因为 nginx 使用 x-real-ip 和代理的 ip。
因此,如果您打算在应用程序中进行 ip 过滤,则可以根据该方法返回的值进行过滤。
使用 github 页面上给出的基本示例:
package main import "github.com/gin-gonic/gin" var Whitelist []string = []string{"1.2.3.4"} func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { whitelisted := false for _, v := range Whitelist { if v == c.ClientIP() { whitelisted = true } } if whitelisted { c.JSON(200, gin.H{ "message": "pong", }) } else { c.JSON(403, gin.H{}) } }) r.Run() // listen and serve on 0.0.0.0:8080 }
好了,本文到此结束,带大家了解了《在Go gin中实现IP限制》,希望本文对你有所帮助!关注公众号,给大家分享更多Golang知识!