浏览器缓存本身不提升安全性,但与安全响应头协同可从传输防护和加载约束两层面加固静态资源:强制HTTPS+HSTS切断明文风险,按资源类型配置X-Content-Type-Options、CSP等头防篡改与解析错误,并通过禁目录浏览、屏蔽敏感后缀、限制HTTP方法等堵住缓存滥用入口。
浏览器缓存本身不提升安全性,但和安全响应头协同配置,能从“传输中防护”和“加载时约束”两个层面加固静态资源——既防中间人篡改缓存内容,也防浏览器错误解析或恶意嵌入。
所有静态资源必须走 HTTPS,否则缓存内容可能在传输中被劫持或替换。Nginx 需在 443 端口终止 TLS,并注入 HSTS 头,让浏览器后续请求自动跳转加密连接:
listen 443 ssl http2;,ssl_protocols TLSv1.2 TLSv1.3;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
return 301 https://$host$request_uri;(放在 80 server 块中)不是所有安全头都适合强缓存资源。关键原则:轻量、兼容、不干扰验证机制。
app.a1b2c3.js):设 Cache-Control: public, max-age=31536000, immutable,只加 X-Content-Type-Options: nosniff 和 X-Frame-Options: DENY —— 这些头不影响缓存逻辑,且能防 MIME 嗅探和点击劫持logo.png):用 public, max-age=2592000(30 天),保留 ETag 协商能力,可额外加 Referrer-Policy: no-referrer-when-downgrade
index.html):禁强缓存,设 no-cache, must-revalidate,同时启用完整防护头,包括 Content-Security-Policy 和 X-XSS-Protection
即使资源被缓存,也不能让它从非法路径或方法被读取。Nginx 原生指令即可实现源头收敛:
autoindex off;(显式声明,不依赖默认)location ~ .(git|log|bak|swp|htaccess)$ { return 404; }
limit_except GET HEAD { deny all; }(写在具体静态 location 内,比 if 更安全)/admin-assets/)叠加 IP 白名单:allow 192.168.1.0/24; deny all;
缓存资源若携带服务器版本等信息,攻击者可精准利用已知漏洞发起打击:
server_tokens off;
www-data),静态目录权限设为 755 或更严disable_symlinks on;(配合 alias 使用更稳妥)