防盗链,实际意义上就是为了防止他人盗用自己的资源,最近用到了FastDFS存储静态资源,为了增加静态资源的安全性,于是就准备做FastDFS的防盗链机制
注意:为了FastDFS的防盗链能直接使用,一定一定要先把自己Nginx搭建好,确保Nginx能用之后才能正常使用FastDFS的防盗链
配置好Nginx之后打开/etc/fdfs/文件夹
打开文件会看到这几个配置,按照上图方式配置
http.anti_steal.check_token=是否做token检查,默认值为false
http.anti_steal.token_ttl:token TTL=生成token的有效时长
http.anti_steal.secret_key=生成token的密钥,设置得长一些,千万不要泄露出去
http.anti_steal.token_check_fail=token检查失败,返回的图片,需指定本地文件名
Nginx的Http文件配置好之后就开始写Python后端代码了
代码如下
import hashlib, time
def Fastdfs_token():
https = 'http://123.34.567.898/' #服务器地址
secret_key = 'globalb316...........' #和http文件的secret_key必须一致
img_url = 'group1\M00/00/00/rBE-A11_EmmAeIdaAFSasghjghic951753' #图片的映射路径
fileId = img_url[img_url.find('\\')+1:] #去掉group1\ 得到后面的部分
timestamp = str(int(time.time())) #获取当前的时间
buff = fileId + secret_key + timestamp #进行字符串的拼接
token = hashlib.md5(buff.encode(encoding='utf-8')).hexdigest() #使用MD5生成防盗链
img_url = https +img_url+ '?'+'token='+token+'&ts='+timestamp
return Respons(img_url)
#最后的防盗链格式为:
http://123.34.567.898/group1\M00/00/00/rBE-A11_EmmAeIdaAFSasghjghic951753?token=b0f838b486ff6eea66be40da58e19417&ts=1568690458
#?token=防盗链 ts=时间戳
ok了,拿上防盗链去快乐的访问图片吧,设置的是5分钟之内访问有效,过了5分钟之后防盗链就失效了,安全性大大的提升
附加一个随机生成secret_key的代码
from django.core.management import utils
secret_key = utils.get_random_secret_key() #随机生成secret_key
ls
secret_key = utils.get_random_secret_key() #随机生成secret_key