go - 在 Go gin 中实现 IP 限制

标签 go ip authorization go-gin

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

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

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

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

最佳答案

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

要回答您的问题,请查看 Gin godoc reference我发现 context struct包含一个 ClientIp() 方法:

implements a best effort algorithm to return the real client IP, it parses X-Real-IP and X-Forwarded-For in order to work properly with reverse-proxies such us: nginx or haproxy. Use X-Forwarded-For before X-Real-Ip as nginx uses X-Real-Ip with the proxy's 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 - 在 Go gin 中实现 IP 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52638783/

相关文章:

go - 在 Go 中创建 2D slice 的简洁方法是什么?

elasticsearch - 我们应该在应用程序中创建多少个 elasticsearch 客户端连接

linux - IP添加路由不起作用

security - Docker注册表和基本身份验证

web-services - OAuth 2 : separating resource server and authorization server

unit-testing - `go test` 在第一次测试失败时停止

java - 快速切换位顺序的方法?

linux - 如何从指定文件中替换IP地址

ip - Magento CE 1.7 获取联系表单中包含的用户 IP

node.js - Spotify API 授权授予流程状态 415