最近应朋友要求做一个防盗链的加密链接。废不多说,直接上代码。

server {
    listen 8885;
    location ~* 8514622d/(.+) {
#   定义加密串 xxx-xxx-xxx
       set $salt "xxx-xxx-xxx";
       rewrite_by_lua '
--定义分钟变量及加密串容错变量
       local time_min=os.date("%M")
       local time_gt=time_min+1
       local time_lt=time_min-1
       --ngx.say(ngx.var.arg_key1)
       --ngx.say(os.date("%M"))
    --ngx.exec("@json")
         if ((ngx.time() - tonumber(ngx.var.arg_key2)) < 10) and ((tonumber(ngx.var.arg_key2) - ngx.time()) < 10)  then
             if ngx.md5(ngx.var.salt..time_min) == ngx.var.arg_key1 then
                 ngx.exec("@json")
             elseif ngx.md5(ngx.var.salt..time_gt) == ngx.var.arg_key1 then
                 ngx.exec("@json")
             elseif ngx.md5(ngx.var.salt..time_lt) == ngx.var.arg_key1 then
                 ngx.exec("@json")
             end
         else
         ngx.say("out of time limite")
         end
        ';
    }
   location @json {
   root /www/server/8514622d-0f18-46c9-aece-9f4c4e43f256/;
   }

实现原理,由加密因子和分钟生成MD5加密串,作为请求参数url参数的KEY1,然后KEY2取ngx.time()这里一是为了校验,而是为了校对,目前是10的误差,也就是目标客户端想获取我们的链接地址,必须要对时,并且时差在十秒以内。

请求结果

我们等20秒后再请求,已经提示不在了。

发表评论

邮箱地址不会被公开。 必填项已用*标注