灏天阁

图片(文件资源)防盗链

· Yin灏

以下是个人在实际工作中关于图片等文件资源访问权限控制的解决方案,仅供参考。

盗链就是在一个网站上展示不属于这个网站服务器上的一些资源文件,一般被盗链的都是图片、音视频、文件等资源。通过盗链的手段可以减轻对自己服务器的资源访问压力,从而增加真实服务器的访问压力。为了保护自己的利益我采取了一些手段防止盗链发生。

说在前面:我们有专门的文件资源服务器,动静分离。

1、检测Referer

一般网站部署方式简单,没有网关代理、路由转发什么的,可以通过检测Referer的方式来防止本站图片等文件资源被外界盗取。

现在,一般来说不会通过检测Referer的方式设置防盗链,原因有二:

  1. Referer可以被改写,
  2. 用户访问的链接有可能不是文件资源服务的真实地址。

复杂一点的部署方式,通常都会经过F5网关、负载均衡、路由转发代理等多种方式,对于用户来说很难获得真实的服务 ip 地址,所以检测Referer的方式也就成了空谈

顺便说一句,现在的安全加固方案绝大多数都不会去单独检测Referer了。

2、校验 Token

我这里采用的是校验Token的方式,即:在图片等文件资源链接后拼接 token 的形式,后端在读取并返回给客户端文件资源前,先校验token是否有效或者是否携带 Token,校验通过即放行。Token只有在正常登录系统后,服务器下发的令牌。

这样当在系统外是无法直接访问文件资源的。当然 Token 是存在有效期的,可以使用有效期内的 Token,自行拼接文件资源路径进行访问下载,这是一个风险点。

3、后端生成文件资源访问链接

这种方法比较特殊,通过后端生成文件资源访问的fileId,这个 fileId 映射真实的文件资源,然后拼接访问链接进行资源访问。核心技术是控制 fileId 的生成、销毁,fileId 只能使用一次(只有一次有效期),客户端访问文件链接时立刻消费掉 fileId,再次访问时映射关系已经断开,显示403

4、总结

我使用的是第二种方案,检测 Token,同时实现了在一定的时期内文件访问链接固定的功能,这样有助于其它业务功能的需要。

也可以把这几种方式组合使用,但从防盗功能上来讲,效果会更佳,但,要结合实际的业务考量。

- Book Lists -