首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【BUG修复】网络流媒体协议RTSP拉流平台EasyNVR增加鉴权抵御外部攻击优化

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

作者头像
EasyNVR
发布2020-12-18 14:19:56
发布2020-12-18 14:19:56
6110
举报
文章被收录于专栏:EasyNVREasyNVR

为了保护系统内容和信息的安全性,我们讲过TSINGSEE青犀视频团队在已经上线的视频平台如EasyCVR、EasyGBS等都设置了登录鉴权,并且在调用接口进行二次开发时,也需要先调用登录接口。登录鉴权即系统对用户使用数据业务的合法性和有效性(状态是否为激活)进行检查。

在一次测试中我们偶然发现EasyNVR在收到强行攻击的时候,攻击者可以在没有获取到登录权限或未授权的情况下,无需输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接进行访问到控制台主页,并且进行修改及删除等操作。

代码语言:javascript
复制
api/v1/config/custom
api/v1/getbaseconfig

于是我们将加强EasyNVR的信息保护机制,全方位防止黑客及不法分子对EasyNVR的侵入。这个问题可能是我们后端没有鉴权造成的,可以通过在EasyNVR后端该路由的地方添加一下鉴权解决这个问题,只有在登录之后才能访问。

在这个地方添加一个鉴权的方法。将上面代码改为CheckAPIAuth(),这个方法就是鉴权的方法。

代码语言:javascript
复制
api.GET("/getbaseconfig", CheckAPIAuth(), API.GetBaseConfig)

另外一个接口也是如此。

将上面代码添加一个鉴权方法改为如下代码:

代码语言:javascript
复制
config.GET("/custom", CheckAPIAuth(), GetCustom)
代码语言:javascript
复制
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青犀视频研发团队上线了很多优秀的视频平台,并且提供测试账号供大家测试,欢迎大家了解。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档