面试题答案
一键面试面临的安全威胁
- 数据泄露:攻击者可能通过各种手段获取缓存中的敏感数据,例如用户信息、商业机密等。比如恶意内部人员利用权限获取缓存中的用户密码。
- 缓存穿透:查询一个一定不存在的数据,由于缓存不起作用,每次都去查询数据库,可能导致数据库压力过大甚至崩溃。例如黑客恶意构造大量不存在的查询Key来攻击系统。
- 缓存雪崩:大量缓存同时过期失效,导致大量请求直接访问数据库,造成数据库压力骤增甚至宕机。如系统在某一时刻加载了一批缓存,设置了相同的过期时间,过期时就可能引发缓存雪崩。
- 缓存击穿:一个设置了过期时间的Key,在过期瞬间,大量请求同时访问,导致请求全部转发到数据库,引起数据库压力瞬间增大。比如高并发场景下,某个热门商品的缓存过期时大量请求同时到达。
- 认证和授权问题:如果缓存系统的认证和授权机制不完善,未授权的用户可能访问和修改缓存数据。例如非法用户绕过认证访问缓存中的数据。
- 中间人攻击:攻击者拦截并篡改缓存服务器与应用服务器之间的数据传输,破坏数据完整性。例如在网络传输过程中修改缓存更新的指令。
常见的安全机制及举例
- 数据加密:对缓存中的敏感数据进行加密存储。例如使用AES加密算法对用户的身份证号码等敏感信息加密后存入缓存,即使数据泄露,攻击者也难以获取真实内容。
- 缓存穿透解决方案:
- 布隆过滤器:在查询之前先通过布隆过滤器判断Key是否存在,不存在则直接返回,避免查询数据库。比如电商系统中使用布隆过滤器过滤不存在的商品ID查询。
- 缓存空值:当查询数据库不存在时,也将空值缓存起来,并设置较短的过期时间。如查询不存在的用户ID,缓存一个空值,5分钟后过期。
- 缓存雪崩解决方案:
- 随机过期时间:给缓存设置不同的过期时间,避免大量缓存同时过期。例如给商品缓存设置的过期时间在1 - 2小时内随机。
- 二级缓存:使用两层缓存,第一层缓存失效后,从第二层缓存获取数据,减轻数据库压力。如一级缓存使用Redis,二级缓存使用Memcached。
- 缓存击穿解决方案:
- 互斥锁:在查询数据库前,先获取互斥锁,只有获取到锁的请求才能查询数据库并更新缓存,其他请求等待。例如在抢购场景中使用互斥锁防止大量请求同时查询数据库。
- 热点数据不过期:对于热点数据不设置过期时间,定期手动更新缓存。比如热门新闻的缓存不设置过期时间,每天凌晨更新一次。
- 完善认证和授权:采用身份验证机制,如用户名密码、Token等方式验证用户身份,并根据用户角色分配不同的操作权限。例如只有管理员角色才能对特定缓存数据进行修改。
- 防止中间人攻击:采用SSL/TLS加密传输协议,对缓存服务器与应用服务器之间的数据传输进行加密。如HTTPS协议保证数据在传输过程中的安全性和完整性。