缓存是网站加速最有效的手段,但配错了会出大事。我们处理过的事故里,有客户的会员中心页被整页缓存,结果 A 用户刷新一下,看到的是 B 用户的姓名、手机号和订单。这不是被黑,是自己配出来的漏洞。
## 一、缓存出事的三种典型情况
登录后页面被公共缓存。会员中心、订单页、后台这类带个人信息的页面,一旦进了共享缓存层,就会被原样发给下一个访客。这是最严重的一类。
表单令牌被缓存。页面里的一次性防伪令牌被缓存后失效,轻则用户提交表单一直报错,重则安全校验形同虚设。
缓存穿透与投毒。攻击者构造带特殊参数的请求,让缓存层存下一份被污染的内容,后续访客拿到的就是被篡改的页面。
## 二、什么该缓存,什么绝不能缓存
可以放心长缓存的:图片、样式表、脚本、字体这类静态资源,配上文件指纹,内容变了文件名就变,缓存一年都没问题。
可以短缓存的:首页、列表页、文章页这类对所有人一样的内容,缓存几分钟到几小时。
绝对不能进公共缓存的:任何登录态页面、购物车、结算页、后台、带有个人标识参数的接口返回。这些必须明确标记为私有、不缓存。
## 三、判断依据要可靠
关键在于缓存层怎么区分这个请求是不是登录用户发的。只看有没有登录凭据是不够的,很多站点会给所有访客都下发会话标识,结果判断失灵。正确做法是用专门的登录标记,且这个标记必须参与缓存键的计算。
另外参数处理也要收紧:只把真正影响页面内容的参数纳入缓存键,其余追踪参数一律忽略,否则一个链接能生成无数份缓存,命中率归零还占满空间。
## 四、缓存清理要跟得上
改了价格、下架了产品、删了一篇文章,缓存里还是旧的,客户按旧价格下单就是纠纷。内容更新时要能精准清掉相关页面的缓存,而不是靠它自己过期。
## 五、上线后必须实测
配完缓存要做的验证很简单:用两个不同账号登录,互相刷新对方页面,看会不会串号;退出登录后再访问会员页,看会不会残留信息。这一步花十分钟,能避免最尴尬的事故。
网站加速和缓存策略是我们的常规服务项,既要快也要安全,两者不该二选一。
—
担心网站被黑、被挂马、被打挂?安全防御、SSL 证书托管、网站加速、插件定制我们都能接。微信 jeans2045、QQ 361611074,先说说你的情况,我们给判断和方案。