上传的附件怎么防止被别人直链下载?

已解决 提问于 2026-10-25 提问者:超级管理员 10 次阅读

付费资源放在 runtime/upload 下,把文件直链发出去就能绕过积分直接下载,怎么堵?

回答(1)

已采纳最佳答案
  • 2026-10-25 回答 最佳答案

    两条一起做才安全:

    1. 文件放到 Web 不可达目录:现在上传的附件统一落 runtime/secure/(付费资源在 runtime/secure/paid/),站点的 nginx/.htaccess/内置路由三层都 deny 这个目录,直链直接 403;
    2. 一律走受控路由下载:普通附件走 /attachment/{id},付费资源走 /resource/file/{id}/{index}?currency=points,由 PHP 校验登录与积分后再吐文件。

    额外两点加固:

    • 文件名带会员识别码:下载时文件名形如 12-1869FF38.zip,识别码是该会员独有的 HMAC,一旦外传可溯源到账号;
    • 压缩包按附件 ID 重命名落盘,原始文件名不外露。

    自查方法:拿一个附件 id,浏览器直接访问 /runtime/secure/... 应该是 403/404,访问 /attachment/{id} 才返回文件。

写回答

该问题已解决,不再接受新的采纳。