准备开发个简单的防盗链模块,收集需求

26 views
Skip to first unread message

deltay

unread,
May 21, 2009, 4:31:56 AM5/21/09
to cnginx
准备通过检查refer头来实现防盗链
配置方式类似:
check_referer on;
check_referer_rule uri_reg valid_referer_reg action=[allow|
deny]

Zou Yong

unread,
May 21, 2009, 4:36:18 AM5/21/09
to cng...@googlegroups.com
这个方法对于文件下载不管用,一般的现在工具都会填referer头,对图片到可以防一防别的网页引用你的图片。

 
在09-5-21,deltay <delt...@gmail.com> 写道:

deltay

unread,
May 21, 2009, 4:56:08 AM5/21/09
to cnginx
我们可以讨论出一个方法来:

针对需要设置防盗链的URI,
我们对请求进行检查,参数 hotlink=........,如果没有那个参数,我们就生成一个随机的串,然后返回302,让对方再拿一次。
如果有hotlink参数,则检查是否合法,如果合法,则正常访问。如果不合法则继续302。

配置为:
hot_link_protect on;
hot_link_param_id htid;
hot_link_param_retry htretry;
hot_link_retry 3;
hot_link_rule action=[allow|deny] uri_reg referer_reg


On 5月21日, 下午4时36分, Zou Yong <zou...@gmail.com> wrote:
> 这个方法对于文件下载不管用,一般的现在工具都会填referer头,对图片到可以防一防别的网页引用你的图片。
>

> 在09-5-21,deltay <delta....@gmail.com> 写道:

deltay

unread,
May 21, 2009, 5:22:54 AM5/21/09
to cnginx
工具填了referer,只能填网站域名,如 http;//www.a.com/吧,如果我们限制访问某些资源只能从指定的地址过来,如
http://www.a.com/mp3/mymp3.html
那是不是可以阻挡住呢?

On 5月21日, 下午4时36分, Zou Yong <zou...@gmail.com> wrote:

> 这个方法对于文件下载不管用,一般的现在工具都会填referer头,对图片到可以防一防别的网页引用你的图片。
>
> 在09-5-21,deltay <delta....@gmail.com> 写道:

Zou Yong

unread,
May 21, 2009, 5:45:45 AM5/21/09
to cng...@googlegroups.com
当然不是只能填网站域名啦,你不信可以安个迅雷,或者flashget之类的,抓包可以看到从镜像下载的时候能正确的填referer。它填的这个referer是别人成功下载的referer,除非你每次下载都给分配一个不一样的session id,并且下载完后就删除session,也可以下载的时候需要输入一个验证码,验证成功才能发送文件,这个应该比较好做。
 
在09-5-21,deltay <delt...@gmail.com> 写道:

坏人

unread,
May 24, 2009, 3:16:46 AM5/24/09
to cnginx
最不可靠的防盗链就是单纯基于referer的。迅雷对原始资源的伪造是基于url的,对镜像站点的伪造是后台记录正确的数据。而如果才后加个参数,那
和Access Key Module有啥区别?

Delta Yeh

unread,
May 24, 2009, 10:03:54 AM5/24/09
to cng...@googlegroups.com
那你觉得有啥好的途径么,我们一起讨论一下。


2009/5/24 坏人 <eel...@foxmail.com>

Yorgo Sun

unread,
May 24, 2009, 7:08:35 PM5/24/09
to cng...@googlegroups.com
一般防盗链都和时间戳相关联,你访问的地址其中有一个参数是一个加密的时间戳,这个在你的宿主网页上计算出来并加密,用户点击访问时,这面的服务器负责解密并判断是否时间超出了你预设的范围,如果超出则不允许访问,如果没有超出再拿到具体的内容并显示。

这个加密时间戳有放在url里当做参数的,也有放在cookie里的,随你挑选。这应该是目前常用的最完善的一个防止盗链的方法了。

2009/5/24 Delta Yeh <delt...@gmail.com>



--
孙绍轩 Yorgo Sun

Delta Yeh

unread,
May 24, 2009, 9:56:41 PM5/24/09
to cng...@googlegroups.com
恩,我觉得放在COOKIE里可能比较好一点。因为放在URL里,需要宿主应用的网页生成那个时间戳,
既然大家都用nginx当服务器或反向代理,我想采用cookie的方式可能配置更方便一点。


这个模块对所有请求都设置一个COOKIE。
如果指定的资源请求没收到这个COOKIE,则认为是盗链,转到指定页面。
如果请求有这个COOKIE,则放行。




2009/5/25 Yorgo Sun <yorg...@gmail.com>

坏人

unread,
May 26, 2009, 8:58:58 AM5/26/09
to cnginx
如果想限时下载,可以用时间戳。迅雷、快车的下载机制我陆续分析了一年多,发现并不是那么简单的。当下载到中间暂停,过了一个月再下载,那显然超时了。
我是往大的说,那一个小时算不算超时?一天算不算?不可能有一个统一数据。
基于目前的http协议,cookie防盗链效果是最好的,但别想到时间戳去。我真见过只有10字节/秒的网络,还不停的掉线

坏人

unread,
May 26, 2009, 9:15:13 AM5/26/09
to cnginx
最好带简单加密。我预计不久的将来,迅雷的p2sp部分可能会记录cookie,这样防盗链插件会立即失效
当然加密不能复杂,我其中一个网站下载的请求是每秒100-1000次。一开始用md5根本吃不消,后来自己写了个模块才搞定

On 5月25日, 上午9时56分, Delta Yeh <delta....@gmail.com> wrote:
> 恩,我觉得放在COOKIE里可能比较好一点。因为放在URL里,需要宿主应用的网页生成那个时间戳,
> 既然大家都用nginx当服务器或反向代理,我想采用cookie的方式可能配置更方便一点。
>
> 这个模块对所有请求都设置一个COOKIE。
> 如果指定的资源请求没收到这个COOKIE,则认为是盗链,转到指定页面。
> 如果请求有这个COOKIE,则放行。
>

> 2009/5/25 Yorgo Sun <yorgo...@gmail.com>
>
>
>
>
>
> > 一般防盗链都和时间戳相关联,你访问的地址其中有一个参数是一个加密的时间戳,这个在你的宿主网页上计算出来并加密,用户点击访问时,这面的服务器负责解密并判-断是否时间超出了你预设的范围,如果超出则不允许访问,如果没有超出再拿到具体的内容并显示。
> > 这个加密时间戳有放在url里当做参数的,也有放在cookie里的,随你挑选。这应该是目前常用的最完善的一个防止盗链的方法了。
>
> > 2009/5/24 Delta Yeh <delta....@gmail.com>


>
> >> 那你觉得有啥好的途径么,我们一起讨论一下。
>
> >> 2009/5/24 坏人 <eel...@foxmail.com>
>
> >> 最不可靠的防盗链就是单纯基于referer的。迅雷对原始资源的伪造是基于url的,对镜像站点的伪造是后台记录正确的数据。而如果才后加个参数,那
> >>> 和Access Key Module有啥区别?
>
> > --

> > 孙绍轩 Yorgo Sun- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Delta Yeh

unread,
May 26, 2009, 9:18:16 AM5/26/09
to cng...@googlegroups.com
这么说你已经开发了类似的模块了?

2009/5/26 坏人 <eel...@foxmail.com>

坏人

unread,
May 26, 2009, 9:21:09 AM5/26/09
to cnginx
哈,只是简单加密做成了模块,非常简单的,我花些时间口算都能解密
防盗链部分一样用的是cookie,只是没有基于时间戳

On 5月26日, 下午9时18分, Delta Yeh <delta....@gmail.com> wrote:
> 这么说你已经开发了类似的模块了?
>
> 2009/5/26 坏人 <eel...@foxmail.com>
>
>
>
> > 最好带简单加密。我预计不久的将来,迅雷的p2sp部分可能会记录cookie,这样防盗链插件会立即失效
> > 当然加密不能复杂,我其中一个网站下载的请求是每秒100-1000次。一开始用md5根本吃不消,后来自己写了个模块才搞定
>
> > On 5月25日, 上午9时56分, Delta Yeh <delta....@gmail.com> wrote:
> > > 恩,我觉得放在COOKIE里可能比较好一点。因为放在URL里,需要宿主应用的网页生成那个时间戳,
> > > 既然大家都用nginx当服务器或反向代理,我想采用cookie的方式可能配置更方便一点。
>
> > > 这个模块对所有请求都设置一个COOKIE。
> > > 如果指定的资源请求没收到这个COOKIE,则认为是盗链,转到指定页面。
> > > 如果请求有这个COOKIE,则放行。
>
> > > 2009/5/25 Yorgo Sun <yorgo...@gmail.com>
>

> > 一般防盗链都和时间戳相关联,你访问的地址其中有一个参数是一个加密的时间戳,这个在你的宿主网页上计算出来并加密,用户点击访问时,这面的服务器负责解密并判--断是否时间超出了你预设的范围,如果超出则不允许访问,如果没有超出再拿到具体的内容并显示。


> > > > 这个加密时间戳有放在url里当做参数的,也有放在cookie里的,随你挑选。这应该是目前常用的最完善的一个防止盗链的方法了。
>
> > > > 2009/5/24 Delta Yeh <delta....@gmail.com>
>
> > > >> 那你觉得有啥好的途径么,我们一起讨论一下。
>
> > > >> 2009/5/24 坏人 <eel...@foxmail.com>
>
> > 最不可靠的防盗链就是单纯基于referer的。迅雷对原始资源的伪造是基于url的,对镜像站点的伪造是后台记录正确的数据。而如果才后加个参数,那
> > > >>> 和Access Key Module有啥区别?
>
> > > > --
> > > > 孙绍轩 Yorgo Sun- 隐藏被引用文字 -
>

> > > - 显示引用的文字 -- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Delta Yeh

unread,
May 26, 2009, 9:23:05 AM5/26/09
to cng...@googlegroups.com
可以简单说说你的设计思路么?当然,在你方便的前提下。
如果不方便就算了。

2009/5/26 坏人 <eel...@foxmail.com>

坏人

unread,
May 30, 2009, 3:38:52 PM5/30/09
to cnginx
这几天忙坏了,同时要做两个游戏外挂。另外自己的一个网站要进行大的架构升级,还要处理些工厂的事务。。。
用nginx做二次开发确实不错,比apache都容易,赞一下。
我的办法你可以看下我的网站。不限时间只要文件存在就可以下载,另外在任何时候任何情况下都可以拦住迅雷快车旋风的盗链

防盗链有几个办法
1、根据用户ip进行hash,以url传递参数或在cookie中也行。优点是防盗链彻底,缺点是中国和很多发展中国家的ip资源严重不足,adsl
的动态ip普遍,一旦断线就无法续传了。
2、时间戳。优点是超过期限无法下载,防盗链也彻底。缺点是谁能保证规定时间内能下完,尤其是超大文件不好估算时间的。另外如果在规定时间内迅雷记录了
此资源并且采用的是url传递,那任何人都可以下载了。
3、登录下载。优点也是封的彻底,缺点是不适合非会员制网站
4、我的办法。封我帐号还没找你算账呢,能分析出来我才服你。分析不出来我只能认为你是懂几句外语就狐假虎威以为中国没人才的类型。
说实话我英语4级只有28分,看英语文章除了介词助词其他大部分都不认识,见了鬼佬打招呼我只会三句hello. how are you.
good bye

On 5月26日, 下午9时23分, Delta Yeh <delta....@gmail.com> wrote:
> 可以简单说说你的设计思路么?当然,在你方便的前提下。
> 如果不方便就算了。
>
> 2009/5/26 坏人 <eel...@foxmail.com>
>
>
>
> > 哈,只是简单加密做成了模块,非常简单的,我花些时间口算都能解密
> > 防盗链部分一样用的是cookie,只是没有基于时间戳
>
> > On 5月26日, 下午9时18分, Delta Yeh <delta....@gmail.com> wrote:
> > > 这么说你已经开发了类似的模块了?
>
> > > 2009/5/26 坏人 <eel...@foxmail.com>
>
> > > > 最好带简单加密。我预计不久的将来,迅雷的p2sp部分可能会记录cookie,这样防盗链插件会立即失效
> > > > 当然加密不能复杂,我其中一个网站下载的请求是每秒100-1000次。一开始用md5根本吃不消,后来自己写了个模块才搞定
>
> > > > On 5月25日, 上午9时56分, Delta Yeh <delta....@gmail.com> wrote:
> > > > > 恩,我觉得放在COOKIE里可能比较好一点。因为放在URL里,需要宿主应用的网页生成那个时间戳,
> > > > > 既然大家都用nginx当服务器或反向代理,我想采用cookie的方式可能配置更方便一点。
>
> > > > > 这个模块对所有请求都设置一个COOKIE。
> > > > > 如果指定的资源请求没收到这个COOKIE,则认为是盗链,转到指定页面。
> > > > > 如果请求有这个COOKIE,则放行。
>
> > > > > 2009/5/25 Yorgo Sun <yorgo...@gmail.com>
>

> > 一般防盗链都和时间戳相关联,你访问的地址其中有一个参数是一个加密的时间戳,这个在你的宿主网页上计算出来并加密,用户点击访问时,这面的服务器负责解密并判---断是否时间超出了你预设的范围,如果超出则不允许访问,如果没有超出再拿到具体的内容并显示。

Delta Yeh

unread,
May 30, 2009, 9:37:08 PM5/30/09
to cng...@googlegroups.com
兄弟,我觉得你很有意思,纯技术爷们,哈哈。
E文只是一个工具而已,不用太在意。如果能用中文把问题解决了,干嘛还要费劲用E文呢?


2009/5/31 坏人 <eel...@foxmail.com>

Yorgo Sun

unread,
Jun 4, 2009, 1:54:40 AM6/4/09
to cng...@googlegroups.com
http://wiki.nginx.org/NginxHttpSecureDownload

这个模块儿是否就能满足大家防盗的需求呢?

2009/5/31 Delta Yeh <delt...@gmail.com>



--
孙绍轩 Yorgo Sun

Reply all
Reply to author
Forward
0 new messages