EasyGBS国标视频平台新增IP登录锁定,增强用户登录安全性

自从公安部提出了国标GB28181协议之后,国标协议就在视频监控领域特别火热。EasyGBS国标视频云服务平台也是基于国标GB28181协议而生,在安防行业应用比较广泛的视频监控平台。

EasyGBS国标视频平台新增IP登录锁定,增强用户登录安全性_第1张图片

EasyGBS平台支持国标协议的设备接入,并提供RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流进行分发,能够为大数据平台的搭建提供视频能力的支持,在很多线下项目中落地应用。

随着网络安全问题的频发,EasyGBS也增强了对用户安全性的考虑,近期我们在EasyGBS新增了一个IP登陆错误次数的功能,用户登录错误超过一定次数,则锁定对应IP。今天我们来和大家分享一下该功能开发的实现过程。

首先,如果用户名和密码错误,则返回给用户“用户名或密码错误”。

clientMsg := c.ClientIP() + username
if !strings.EqualFold(user.Password, form.Password) {
   errorCount(clientMsg)
   AbortWithString(c, http.StatusUnauthorized, "用户名或密码错误")
   return
}

// 错误统计
func errorCount(msg string) {
   if gCfg.LoginErrorLockEnable {
      errorLogin, ok := global.LoginError.Get(msg)
      preCount := 1
      if ok {
         preCount = errorLogin.ErrorCount + 1
      }
      global.LoginError.Set(msg, &global.LoginErrorData{ErrorCount: preCount, LastTime: time.Now().Unix()})
   }
}

错误统计的代码原理,是如果用户登录错误,则将对应的 clientMag 添加到缓存中,错误次数加1。

如果错误次数超过配置中的错误次数,则再次调用代码,直接返回不允许调用该接口。

clientMsg := c.ClientIP() + username
if cfg.LoginErrorLockEnable {
   errorLogin, ok := global.LoginError.Get(clientMsg)

   if ok && uint(errorLogin.ErrorCount+1) > cfg.LoginErrorNumbers {
      if errorLogin.LastTime != 0 && time.Now().Unix()-errorLogin.LastTime >= int64(cfg.LoginErrorLockTime*60) {
         global.LoginError.Delete(clientMsg)
      } else {
         errMsg := "IP:" + c.ClientIP() + ",用户:" + username + " 登录密码连续错误多次,请 " + strconv.Itoa(int(cfg.LoginErrorLockTime)) + " 分钟后再试。"
         AbortWithString(c, http.StatusBadRequest, errMsg)
         return
      }
   }
}

实现效果如下图所示:

EasyGBS国标视频平台新增IP登录锁定,增强用户登录安全性_第2张图片

多次登录错误则锁定IP的功能,有利于保障用户账号登录的安全性。

去年我们对EasyGBS、EasyDSS等视频平台陆续更换了新内核版本。新内核版本性能更加稳定,感兴趣的用户可以前往官网进行使用体验。我们也将不定期在博客更新关于EasyGBS平台的功能开发及优化、FAQ、配置操作等内容,欢迎大家关注我们的更新,或留言与我们互动。

你可能感兴趣的:(EasyGBS,音视频,tcp/ip,网络协议)