ASP.NET缓存方案

Cache‑Control 不设置(缺失)的真实影响

不设置 Cache‑Control 时,IIS/ASP.NET 默认允许浏览器缓存页面、表单、用户数据。

1. 退出登录后,按返回键还能看到后台页面(最大隐患)

用户退出系统、关闭浏览器后,别人打开浏览器后退就能看到之前的敏感页面、查询数据、账号信息。
 
这是等保必查高危漏洞。

2. 敏感数据本地保存,容易泄露

浏览器会把页面 HTML、接口数据存在本地缓存文件夹,
 
木马、恶意软件可读取缓存文件,泄露账号、业务数据。

3. 代理服务器(公司网关、CDN)缓存你的页面

内网 / 外网代理会缓存页面,其他用户可能访问到别人的后台数据。

4. 安全扫描直接报中高危漏洞


配置 no-cache, no-store, must-revalidate 解决了什么?

  • no-store:禁止浏览器本地存储任何页面内容(最核心)
  • no-cache:每次必须请求服务器,不直接用缓存
  • must-revalidate:过期后强制重新请求,不使用旧缓存

通俗比喻

  • no-store = 看完就销毁,不留痕迹
  • no-cache = 想看新内容,必须问服务器
  • must-revalidate = 绝对不能用旧的
简单说:看完即销毁,不留痕迹,后退也看不到旧页面。

 

全局 Cache-Control=no‑store 会让 JS、CSS、图片、静态资源每次都重新下载,页面变慢、服务器压力变大

ASP.NET Framework 4.0 + IIS 完美方案:

动态页面(后台页面 / 接口)禁止缓存,静态资源(js/css/img)允许缓存,既过等保,又不影响性能。

一、原理

  • 全局 Web.config 加 Cache-Control: no-cache, no-store, must-revalidate → 所有请求默认不缓存
  • 用 IIS 输出缓存 / 位置匹配,对静态文件单独放开缓存

二、直接复制可用配置(Web.config,.NET4.0 专用)

<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <!-- 全局默认:动态页面禁止缓存(过等保) -->
        <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
      </customHeaders>
    </httpProtocol>

    <!-- 👇 关键:静态资源单独允许缓存,解决性能问题 -->
    <location path="Content">
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <remove name="Cache-Control" />
            <add name="Cache-Control" value="public, max-age=86400" />
          </customHeaders>
        </httpProtocol>
      </system.webServer>
    </location>

    <location path="Scripts">
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <remove name="Cache-Control" />
            <add name="Cache-Control" value="public, max-age=86400" />
          </customHeaders>
        </httpProtocol>
      </system.webServer>
    </location>

    <location path="Images">
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <remove name="Cache-Control" />
            <add name="Cache-Control" value="public, max-age=86400" />
          </customHeaders>
        </httpProtocol>
      </system.webServer>
    </location>
  </system.webServer>
</configuration>

 

说明

  • max-age=86400 = 缓存 1 天(可改:31536000=1 年)
  • public = 浏览器、代理都可缓存
  • 只对 Content、Scripts、Images 静态文件夹生效
  • aspx、ashx、接口、后台页面依然禁止缓存,满足安全要求

三、如果你静态文件比较散,不想一个个加 location

用 URL 重写模块 按后缀匹配(.js/.css/.png/.jpg),自动给静态文件加缓存头。
需要我给你写一段按后缀匹配的 rewrite 规则吗?

四、简单总结

全局禁止缓存 → 满足等保、防止退出后返回查看敏感数据

静态资源单独放开缓存 → 不影响页面加载速度、减少服务器压力

这套是企业后台系统 标准最优实践

posted @ 2026-05-22 09:36  码农隐于朝  阅读(6)  评论(0)    收藏  举报