用户工具

站点工具


nginx_防盗链_防迅雷

nginx:防盗链,防迅雷

编译时选择的模块

# cd /usr/ports/www/nginx && make config && make install clean
加选:

LUA

废话处

现行的防盗链的方法无非是检测referer头,因为http请求中常会指明referer,这相当于生活中你去拜访某人,需要别人的推荐信,referer就相当于推荐信,但这里有个问题哪,这个信可以随便伪造的哪,你没办法验明真伪的!!

所以迅雷就常用伪造的referer欺负小朋友们了。

那我们怎么办?因为用户下载的文件,肯定有特定的格式,比如rar,zip,exe,jpg等等,而这些不可以直接访问的,肯定需要你有个指引的界面,这个界面可能是 html,php,jsp,asp 等等网页格式

那如果是真用户,肯定是浏览了你的html ,php ,jsp ,asp 等网页后,才能知道你的文件下载链,才能下载!这过程肯定的,除非对方是天神,直接猜中你的下载链接 ,不然肯定要看了你的页面(包括广告,这是你的收益的重点),才能下载

OK!那我们如何在一张极简单的html上面给个zip文件的下载地址,并防盗链?如果,你懂点技术,你肯定要笑我是不是疯了!!!因为你认为这是不可能实现的技术!

我们在用户观看html 等简单网页的时候,输出给客户一个cookie 值,你肯定要笑了,html怎么输出cookie?这个可以由nginx代劳

nginx配置

location ~* \.(htm|html)$ {
   rewrite_by_lua '
    local TaMud_id = ngx.md5("TaMud" .. ngx.var.remote_addr)
   if (ngx.var.cookie_TaMud_id ~= TaMud_id) then 
       ngx.header["Set-Cookie"] = "TaMud_id=" .. TaMud_id .. ";path=/;"
--       return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.uri)
   end 
  ';
    }

上面代码写入你的nginx 的网站config配置中(以上需要nginx vhost 配置知识,并懂一点Lua语言) 这里需要注意的是 nginx conf 中注解是 # ,因为这里一断是Lua 代码,其注解是 – 两个减号,切记切记,注解是不同的,你不要调试的时候搞错了,到时候弄的骂我

上面的代码意义是,获得用户的IP地址,然后加上TaMud这个关键字(TaMud关键字一定要换成别人不知道的),取其MD5码(这个防迅雷),然后检测用户的cookie如果传过来的 cookie里有TaMud_id 这个值,并跟本地计算出来的值是否一样( 防人伪造),如果不一样,就把本地计算出来的值传给人家

OK,当用户浏览你页面的时候,他的本地就获得了cookie TaMud_id这个值!

那当他要下载你的机器上的zip文件的时候,使用nginx 再进行同样的判断,如果没有TaMud_id的值,就不停的进行302跳转,跳死他,代码如下

location ~* \.(zip|rar|exe)$ {
   rewrite_by_lua '
    local TaMud_id = ngx.md5("TaMud" .. ngx.var.remote_addr)
   if (ngx.var.cookie_TaMud_id ~= TaMud_id) then 
--       ngx.header["Set-Cookie"] = "TaMud_id=" .. TaMud_id .. ";path=/;"
       return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.uri)
   end 
  ';
    }

此处代码跟上面的有所不同,注解掉的是,回给用户的cookie,因为这里下载的是文件,不需要回给用户COOKIE,不然对方支持cookie的话,你就中招了,这里只需要302跳转,让他不停的跳

OK,到此你就成功了

就算迅雷把下载链接,人家COOKIE值,人家传递值都回抓取并共享给他的客户也没有用了,因为IP不同,算出来的TaMud_id 不同,所以人家用迅雷下载的话,就会不停的在 302 里跳转。

当然你也可以神仙一样的,修改一下 return ngx.redirect(“https://flfq.peuland.com”) 这你的网站首页,这样人家就跳到你的首页去

/data/vhosts/wiki-data/pages/nginx_防盗链_防迅雷.txt · 最后更改: 2015/04/13 20:13 由 flfq