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

如何禁止用户直接通过URL下载文件,仅允许从指定页面跳转获取

实现方案

方案1:HTTP Referer校验(轻量实现,适合普通场景)

基于浏览器跳转时会自动携带Referer请求头的特性,仅需在服务端配置访问规则即可快速实现。

  • 校验逻辑:
    • 收到https://example.com/file.exe这类资源请求时,服务端先读取请求头的Referer字段
    • 若Referer值为https://example.com/getfile.html,直接返回文件资源允许下载
    • 若Referer为空、或来源不是指定页面,直接返回302状态码重定向到https://example.com/getfile.html
  • Nginx配置示例(直接追加到站点配置文件即可生效):
location ~* \.(exe|zip|rar|pdf)$ {
    valid_referers https://example.com/getfile.html;
    if ($invalid_referer) {
        return 302 https://example.com/getfile.html;
    }
}
  • 注意:该方案存在小概率被伪造Referer绕过的可能,适合对安全性要求不高的普通场景,同时需要注意不要在getfile.html页面配置Referrer-Policy: no-referrer、也不要给下载用的<a>标签加rel="noreferrer"属性,避免Referer头丢失导致正常用户无法下载

方案2:临时Token校验(高安全性,无法轻易绕过)

需要前后端配合实现,原理是下载链接附带短时有效、和用户绑定的校验Token,完全不依赖Referer头,破解难度极高。

  • 实现步骤:
    1. 用户访问https://example.com/getfile.html时,后端生成一个有效期10分钟、和当前用户会话绑定的临时Token,存入Redis等缓存中,同时将Token注入到页面的下载链接内,最终<a>标签的href属性为https://example.com/file.exe?token=xxxxxxx
    2. 用户点击<a>标签请求资源时,服务端先校验URL携带的Token是否存在、是否和当前用户会话匹配、是否在有效期内
    3. 校验通过则返回文件资源,同时可删除该Token实现一次性使用;校验失败直接重定向到getfile.html

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:09:03