nestjs-安全简介

1,088 阅读2分钟

前言

nestjs中常见的安全策略例如我们使用的jwt、token、guard、权限类(前面我们使用的 guard 的 @Public 装饰器操作设置的类似于权限一样的东西,只要和用户权限对比则就是真权限了)

此外还有CORS跨域操作,这个在浏览器中很常见,还有就是传输加密,加密分为对称加密和非对称加密,这种事情一般是 https + ssl 做这些,一般我们无需做什么

除了传输加密,还有防篡改加密验证,当用户修改时,我们无法判断其是真实用户还是伪装用户,我们用采用非对称加密,前后两端根据已有参数按照某些固定、动态规则,分别进行加密对比,以进一步做到验证身份,达到防篡改功能,也就是我们对一些操作通过加密手段验证sign

除了这些还有我们常见的密码加密储存等,也是为了避免敏感信息泄露,连开发人员都不知道那就是真不知道哈

还有很多

本篇文章主要简介 保护应用程序免受暴力攻击的一种技术-- 限流

当然,一般项目是不推荐使用这个技术的,就和普通的jwt守卫、权限似的,其只会额外消耗我们性能,非必要不适用即可,项目体量大了,有必要的话就上吧,反正也是说上就能上

ps:当然不是说这就真能完全解决所有问题,特殊情况至少能够减少一些局部压力,只能说是一种常见的防卫手段哈,还很多交给网络、运维工程师他们做吧😂

配置及使用

yarn add @nestjs/throttler

直接导入了该模块,并选择如何绑定 ThrottlerGuard(局部还是全局)

@Module({
  imports: [
    ThrottlerModule.forRoot({
      ttl: 60,
      limit: 10,
    }),
  ],
})
export class AppModule {}

//将为受保护的应用程序路由设置全局选项,包括 `ttl`(存活时间)和 `limit`(ttl 内的最大请求数)。
{
  provide: APP_GUARD, //加入全局,是不是有点像jwt
  useClass: ThrottlerGuard
}

有些模块不需要限速,可以使用 SkipThrottle 跳过,也可以使用 SkipThrottle(false) 给里面的个别方法取消跳过限速

//给整个模块跳过限速
@SkipThrottle()
@Controller('user')
export class UserController {
  //取消跳过,也就是会限速
  @SkipThrottle(false)
  notSkip() {
  }
  
  //取消限速了
  skip() {
  }
}

如果有个别接口磨坏需要根据不同情况设置不同的限速和时间,可以自己设置

// 覆盖默认的限速和持续时间配置。
@Throttle(3, 60)
@Controller('user')
export class UserController {

  @Throttle(3, 60)
  done() {
  }
}