MST
星途 面试题库

面试题:缓存设计之中等难度:缓存系统的常见安全威胁及基础防护措施

请列举至少三种缓存系统可能面临的安全威胁,并针对每种威胁阐述对应的基础防护措施。
34.6万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试
  1. 缓存穿透
    • 威胁描述:查询一个一定不存在的数据,由于缓存未命中,就会直接查询数据库,若大量这样的请求,会导致数据库压力过大甚至崩溃。
    • 防护措施
      • 布隆过滤器:在查询之前,使用布隆过滤器判断数据是否存在。布隆过滤器可以高效地判断一个元素是否在集合中,虽然存在一定误判率,但能有效拦截绝大部分不存在的数据查询,避免直接穿透到数据库。
      • 缓存空值:当查询数据库发现数据不存在时,也将空值缓存起来,并设置较短的过期时间,这样后续相同查询会命中缓存,避免多次查询数据库。
  2. 缓存雪崩
    • 威胁描述:缓存中大量数据在同一时间过期,导致这些数据的请求同时穿透到数据库,使数据库瞬间承受巨大压力,甚至可能导致数据库崩溃。
    • 防护措施
      • 设置随机过期时间:避免大量数据同时过期,为每个缓存数据设置一个随机的过期时间,分布在一个合理的时间范围内,从而分散过期压力。
      • 二级缓存:使用两层缓存,第一层缓存失效后,先从第二层缓存获取数据,第二层缓存可以设置较长的过期时间或者不设置过期时间,这样可以在一定程度上缓解数据库压力。
      • 缓存预热:在系统启动时,将部分热点数据预先加载到缓存中,避免在系统运行初期大量请求直接打到数据库。
  3. 缓存击穿
    • 威胁描述:缓存中某个热点数据过期的瞬间,大量针对该数据的请求同时到来,这些请求会绕过缓存直接查询数据库,可能使数据库压力过大。
    • 防护措施
      • 互斥锁:在缓存失效时,使用互斥锁(如 Redis 的 SETNX 命令)来保证只有一个请求去查询数据库并更新缓存,其他请求等待。当获取到锁的请求更新完缓存后,释放锁,其他请求就可以从缓存中获取数据。
      • 永不过期:对于一些非常重要且不经常变化的数据,可以设置为永不过期,定期在后台异步更新数据,或者在数据发生变化时主动更新缓存。
  4. 数据泄露
    • 威胁描述:如果缓存系统的访问控制不当,攻击者可能获取缓存中的敏感数据,如用户信息、密码等。
    • 防护措施
      • 访问控制:严格设置缓存系统的访问权限,只允许授权的应用或用户访问。例如,在 Redis 中可以设置密码,并通过网络策略限制访问来源。
      • 数据加密:对缓存中的敏感数据进行加密存储,这样即使数据被获取,没有解密密钥也无法读取数据内容。例如使用对称加密算法(如 AES)对数据进行加密和解密。
  5. 缓存被篡改
    • 威胁描述:攻击者可能恶意修改缓存中的数据,导致应用程序读取到错误的数据,影响业务正常运行。
    • 防护措施
      • 数据校验:在写入缓存数据时,同时生成数据的校验和(如 MD5、SHA - 1 等)并存储。读取数据时,重新计算校验和并与存储的校验和对比,若不一致则说明数据可能被篡改。
      • 权限控制:严格限制对缓存数据的写权限,只有经过授权的应用或操作才能修改缓存数据。同时,对写操作进行审计和记录,便于追溯和发现异常。