为了保护系统内容和信息的安全性,我们讲过TSINGSEE青犀视频团队在已经上线的视频平台如EasyCVR、EasyGBS等都设置了登录鉴权,并且在调用接口进行二次开发时,也需要先调用登录接口。登录鉴权即系统对用户使用数据业务的合法性和有效性(状态是否为激活)进行检查。
在一次测试中我们偶然发现EasyNVR在收到强行攻击的时候,攻击者可以在没有获取到登录权限或未授权的情况下,无需输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接进行访问到控制台主页,并且进行修改及删除等操作。
api/v1/config/custom
api/v1/getbaseconfig
于是我们将加强EasyNVR的信息保护机制,全方位防止黑客及不法分子对EasyNVR的侵入。这个问题可能是我们后端没有鉴权造成的,可以通过在EasyNVR后端该路由的地方添加一下鉴权解决这个问题,只有在登录之后才能访问。
在这个地方添加一个鉴权的方法。将上面代码改为CheckAPIAuth(),这个方法就是鉴权的方法。
api.GET("/getbaseconfig", CheckAPIAuth(), API.GetBaseConfig)
另外一个接口也是如此。
将上面代码添加一个鉴权方法改为如下代码:
config.GET("/custom", CheckAPIAuth(), GetCustom)
func CheckAPIAuth() gin.HandlerFunc {
return func(c *gin.Context) {
auth := utils.Conf().Section("base_config").Key("api_auth").MustBool(false)
if auth {
// SetUsername中间件已经将uname存进gin上下文中,直接从上下文获取
uname, _ := c.Get("username")
if uname == "" || uname == nil {
c.AbortWithStatusJSON(http.StatusUnauthorized, "Unauthorized")
return
}
}
c.Next()
}
}
再次尝试非用户登录,解决效果如下:
TSINGSEE青犀视频云边端架构智能分析平台都是通过token进行的登录鉴权,大家可以参考《Easy系列视频平台中token机制全解》一文了解一下。TSINGSEE青犀视频研发团队上线了很多优秀的视频平台,并且提供测试账号供大家测试,欢迎大家了解。