防盗链几种实现思路
HTTP-referer机制
通过设置http请求referer,客户端表明以用着,服务端进行判断过滤达到防盗的效果
服务端:需要服务端配置referer 白名单或者黑名单,通关过过滤返回请求响应
客户端:需要在资源请求http头部增加referer 表明合法来源
优点:实现较为简单,开发成本低
缺点:防盗效果较差,referer很容被捕获
举例:
七牛存储,可配置 referer 防盗链(官网说明:https://developer.qiniu.com/fusion/manual/3839/domain-name-hotlinking-prevention)
地址添加时间戳加密参数
通过地址后拼接加密参数,交给服务端进行校验合法性
定义三种加密参数
t:过期时间(十六进制,方便传输)
Key:私密key
url:资源文件请求地址
加密合成规则(取自于七牛)
sign= md5加密(key + encode(url) + t)
将合成好的sign参数和T 带入url请求,服务端解析参数进行合法性判断
优点:防盗效果较好
缺点:开发较为复杂,需要前后端紧密协商
举例:
正常请求地址:
http://plcpzhxni.bkt.clouddn.com/Android/image/201901.png
时间戳防盗链处理后的地址:
http://plcpzhxni.bkt.clouddn.com/Android/image/201901.png?sign=c4cc247224deebf9aebbe7355ae56dbd&t=5c3d861a
七牛存储 ,可配置时间戳防盗链(官方说明:https://developer.qiniu.com/fusion/manual/3841/timestamp-hotlinking-prevention-fusion)
文件数据加密
采用AES RC4 针对文件内容进行加密
优点:防盗效果高
缺点:效率略低,每次下载文件展示都需要在客户端进行加解密,对于快速即时性场景效率不高