前言
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() {
}
}