客户端缓存
- 多为客户端本地存储的信息,例如浏览器缓存,APP应用内缓存数据
- 通常可通过F12,Debug等调试功能读取到,存在安全隐患,通常用于令牌等有明确过期属性,支持修改作废的数据
- 浏览器无痕模式,会对部分缓存行为限制
常见浏览器缓存
- Cookies: 存放Session信息,登陆信息等
- Session Storage / Local Storage: 具备不同的可见范围,大小限制和过期时间
- Index DB: 浏览器本地数据库,带索引,可放大量数据
- 通常会主动实现,但是后端需要能够具备主动失效信息的能力,例如Session验证,Token验证等
负载均衡 / 内容分发
- 通常缓存相关的节点信息,静态文件内容(Logo,图片,js,html)等
- 目的是为了加速访问和响应速度
- 负载均衡通常会包含后端节点的ip等信息,泄露会导致洪水攻击等,通常需要域名映射,或者黑白名单控制
- 用于静态资源缓存时,需要考虑文件版本问题,前端框架通常支持通过Chunkhash等方式来判断资源更新
- 通常不会主动失效,通过定期刷新,版本等方式进行更新
网关
- 此处网关指业务网关,用于代理请求转发
- 通常需要缓存配置中心相关内容,主要是路由等信息,以properties等文件形式磁盘存放
- 信息中可能包含ip,密钥,验密等相关信息,存在安全泄漏。
- 通过防火墙,系统用户,控制机器访问权限,防御XSS,Path Reverse等潜在目录攻击方式
- 通常不会主动失效,通过配置中心指令,信息定期变化,服务重启巡检等方式改变数据内容,作废旧数据
业务服务
- 可执行服务程序本身
- 基于不同编程语言存在不同的本地缓存,例如JVM的堆栈信息等
- 需要通过防火墙,系统用户权限等,控制服务节点的可操作行为,防止通过memory dump拿到关键信息
- 对外服务需要进行安全扫描,防止接口实现本身错误的提供信息,例如常见的监控、检查等接口可能会暴露jvm信息等
- 通常有效周期等同服务生命周期,通过定期变化信息,服务重启巡检等方式改变内容,作废旧数据
分布式缓存
- Redis,clickhouse等常见的告诉内存型,分布式缓存系统
- 通常用于缓存服务间的共享信息,或者关键信息
- 需要配置链接访问密码,黑白名单,机器权限控制等
- 通常能够主动失效,同时具有受空间限制的淘汰策略,应保证正确的配置失效时间,并定期扫描巡检
- 内存型存储,服务重启通常数据消失,如果存在持久化的,需要注意存储文件的清除
消息队列
- MQ等队列,用于服务间解耦后,数据的传递,分发等,大部分为业务数据
- 通常不会主动失效,采用数据消费型,一旦消费,数据在队列中即消失,需要防止死信队列中的数据被获取
- 消息队列中的消息都会被磁盘持久化,需要防止日志中的遗留
- 注意敏感业务数据传递过程中的脱敏,或加密
文档型数据库 / 全文检索
- Mongo,ELK等非关系型数据库,用于快速检索等目的
- 存放的业务数据,内容等同于关系型数据库,同时以独立文档或者索引保存,数据更易读
- 加速读取时,会借助内存缓存,防止内存dump
- 类似业务服务,需要防火墙,黑白名单,用户权限等方式保证数据安全
- 通常不会主动失效,并磁盘持久化,需要脱敏,加密等方式保护信息
关系型数据库
- Mysql,PG等关系性数据库,用于业务和事务等目的
- 存放业务数据,敏感信息需要脱敏或者加密入库
- 同时支持二级缓存等方式,通常加载为内存,需要防止内存dump
- 基于事务控制和一致性的目的,通常会有redo log, undo log等事务日志文件,需要防止文件泄漏被重放
本文由 Ivan Dong 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jun 13, 2023 at 10:11 am