You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IIS Rewrite规则中使用Sec-Fetch-Site请求头限制资源访问

IIS Rewrite规则实现资源访问限制

要实现你需要的资源访问控制,核心是结合Sec-Fetch-Site请求头(现代浏览器)和Referer请求头(兼容旧浏览器),同时精准匹配要保护的资源类型。以下是经测试有效的规则配置:

完整web.config规则代码

<rewrite>
  <rules>
    <rule name="Restrict Resource Access" stopProcessing="true">
      <!-- 匹配需要保护的资源类型,可根据需求添加/修改后缀 -->
      <match url="\.(jpg|jpeg|png|gif|bmp|html|htm)$" ignoreCase="true" />
      <conditions logicalGrouping="MatchAny">
        <!-- 条件1:现代浏览器中,请求来源不是同域 -->
        <add input="{HTTP_SEC_FETCH_SITE}" pattern="^same-origin$" negate="true" />
        <!-- 条件2:无Sec-Fetch-Site头时,检查Referer不是本站域名(兼容旧浏览器) -->
        <add input="{HTTP_REFERER}" pattern="^https?://your-domain\.com/" negate="true" />
        <!-- 直接访问地址栏时,Referer为空,也会触发这个条件 -->
      </conditions>
      <!-- 不符合条件时返回403禁止访问 -->
      <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Access to this resource is restricted." />
    </rule>
  </rules>
</rewrite>

规则说明

  1. 资源匹配:match节点中的正则表达式匹配需要保护的文件后缀,你可以根据实际需求添加(如.svg、.css)或删除不需要的类型。
  2. 条件逻辑:MatchAny表示只要满足其中一个条件就触发规则:
    • 现代浏览器中,Sec-Fetch-Site头不等于same-origin(包括直接访问时的none、跨域请求的cross-site)
    • 旧浏览器或未发送Sec-Fetch-Site头时,Referer头不包含本站域名(直接访问时Referer为空,也会命中此条件)
  3. React动态加载支持:React从本站页面发起的动态资源请求,Sec-Fetch-Site会被浏览器设置为same-origin,因此不会触发规则,资源可正常加载。

注意事项

  • 替换规则中的your-domain\.com为你的实际域名(如果有多个域名,可添加多个add节点并设置logicalGrouping="MatchAny")
  • 测试验证:
    • 直接在地址栏输入资源URL,应返回403
    • 本站页面(包括React应用)中加载资源,应正常显示
    • 将资源嵌入其他网站页面,资源会加载失败
  • 若需要允许子域访问,可修改Referer的正则为^https?://(.+\.)?your-domain\.com/

内容的提问来源于stack exchange,提问作者Eric Malalel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:44:56