【BUG修复】网络流媒体协议RTSP拉流平台EasyNVR增加鉴权抵御外部攻击优化

为了保护系统内容和信息的安全性,我们讲过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青犀视频研发团队上线了很多优秀的视频平台,并且提供测试账号供大家测试,欢迎大家了解。

原文地址:https://www.cnblogs.com/EasyNVR/p/14139874.html