登录
首页 >  Golang >  Go问答

在Go gin中实现IP限制

来源:stackoverflow

时间:2024-04-26 20:03:35 102浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《在Go gin中实现IP限制》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我正在设置一个小型演示应用程序,目前只能从我的家庭 IP 地址访问,也许我会与一小部分技术人员进行协调和共享。

我查看了这里的自述文件,但找不到: https://github.com/gin-gonic/gin

---关于如何将应用程序的访问限制为 gin 中的特定 IP 地址的规范、最小示例是什么?

(另外,这在 2018 年是一个特别不安全的想法,有什么理由吗?)


解决方案


在回答您的问题之前,我想说的是,使用防火墙规则而不是程序本身来限制对应用程序的访问可能更实际,但我离题了。

为了回答你的问题,在查看了 gin godoc reference 后,我发现 context struct 包含一个 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学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>