一种防盗链的方法及服务器与流程

文档序号:18629928发布日期:2019-09-06 23:29阅读:162来源:国知局
一种防盗链的方法及服务器与流程

本发明涉及互联网技术领域,尤其涉及一种防盗链的方法及服务器。



背景技术:

常见的防盗链方法通常使用的技术是将密钥、时间戳、路径作为加密元素,生成加密url(统一资源定位符),通过一定过期时间防止被恶意盗链。然而这个解密方式目前情况来看没有多大的效果,因为现在批量解析库已经能产业化输出网站视频链接,无须在意过期时间问题。而且对于常见url的加密方式已经属于公知区域,爆破程度已经很容易。另一类技术是设置cookie和用户标识符,但是通过设置cookie和用户标识符的常规操作只能保证这个cookie是付费用户,并不能判断出是否盗链使用cookie,盗链者只需要点击一次视频生成这样的cookie就能在一段时间内批量使用,难以防盗。

目前,业内还采用时间戳防盗链,例如,url为http://www.123.com/secret_string/timestamp/uri,这样的例子是通过将字符串url+secretkey(密钥)+timestamp(时间戳)加密成secret_string的形式,限制盗链者在一定时间内使用同一条链接。然而对于现在盗链批量产业化的情况来说,没有任何意义的防盗作用。虽然,聪明的网站会将客户的ip(网络间互连协议)地址、mac(媒体访问控制)地址取出放入加密串中,然后校验前后ip是否一致,但是现有技术存在如下缺点:

(1)防盗链模式单一,且时间戳作为加密串元素之一竟然是明文显示,直接增加爆破密钥的风险;

(2)不能保证获取的ip地址是否真实,容易通过利用xff头部而被欺骗,使得防盗形同虚设;

(3)针对app、zip等下载类资源文件的盗链,这种资源经常受到来自搜索引擎或是应用市场的引用,从而影响客户正常业务,减少网站页面浏览量。

因此,需要一种能够有效地防盗链的方法和服务器。



技术实现要素:

为了解决现有技术防盗链技术中的问题,提出了一种有效地防盗链的方法和服务器。

根据本发明的一个方面,提供了一种防盗链的方法,所述方法包括:

服务器对一资源对应的统一资源定位符中的时间戳进行加密,生成加密的统一资源定位符;

接收客户端针对所述资源的访问请求后,判断所述访问请求中的时间戳是否过期,若判断过期,则拒绝所述访问请求。

其中,所述方法还包括:获取所述客户端的真实ip地址;

并且,若判断所述访问请求中的时间戳不过期,则判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值是否一致,若不一致,则拒绝所述访问请求,

其中,所述特征信息至少包括:所述客户端的真实ip地址。

其中,所述方法还包括:

服务器在资源文件的设定位置插入随机生成的字段,生成新资源文件。

其中,所述方法还包括:

在判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值不一致并拒绝所述访问请求后,记录设定时间段内与所述访问请求相应的用户标识符被拒绝的总次数,判断所述总次数是否超过设定阈值,若超过,则拒绝与所述用户标识符相应的后续访问请求。

其中,对一资源对应的统一资源定位符中的时间戳进行加密包括:

将时间戳中的数字映射为26个英文字母,用对应的英文字母表示时间戳中的数字;

并且,每隔设定周期变换所述时间戳的加密方式。

其中,获取所述客户端的真实ip地址包括:

通过调用real_ip模块获取所述客户端的真实ip地址。

其中,判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值是否一致包括:

获取所述访问请求携带的cookie中的md5值;

基于特征信息通过md5算法计算md5值;

比较所述cookie中的md5值与计算的md5值是否一致;

其中,所述特征信息包括所述客户端的真实ip地址、加密的时间戳、cookie名称、用户标识符、cookie加密密钥。

根据本发明的另一方面,还提供了一种防盗链的服务器,所述服务器包括:

加密模块,用于对一资源对应的统一资源定位符中的时间戳进行加密,生成加密的统一资源定位符;

接收模块,用于接收客户端针对所述资源的访问请求;

判断模块,用于判断所述访问请求中的时间戳是否过期;

执行模块,用于当判断所述时间戳过期时,拒绝所述访问请求。

其中,所述服务器还包括:

获取模块,用于获取所述客户端的真实ip地址;

所述执行模块还用于当判断所述访问请求中的时间戳不过期时,则判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值是否一致,若不一致,则拒绝所述访问请求,

其中,所述特征信息至少包括:所述客户端的真实ip地址。

其中,所述服务器还包括:

服务器在资源文件的设定位置插入随机生成的字段,生成新资源文件。

其中,所述执行模块还用于:

在判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值不一致并拒绝所述访问请求后,记录设定时间段内与所述访问请求相应的用户标识符被拒绝的总次数,判断所述总次数是否超过设定阈值,若超过,则拒绝与所述用户标识符相应的后续访问请求。

其中,所述加密模块还用于:

将时间戳中的数字映射为26个英文字母,用对应的英文字母表示时间戳中的数字;

并且,每隔设定周期变换所述时间戳的加密方式。

其中,所述获取模块还用于:

通过调用real_ip模块获取所述客户端的真实ip地址。

其中,所述执行模块还用于通过下述方式判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值是否一致:

获取所述访问请求携带的cookie中的md5值;

基于特征信息通过md5算法计算md5值;

比较所述cookie中的md5值与计算的md5值是否一致;

其中,所述特征信息包括所述客户端的真实ip地址、加密的时间戳、cookie名称、用户标识符、cookie加密密钥。

本发明中的防盗链技术,具有下述优点:

(1)将时间戳作为加密串,直接指数级增加爆破密钥的难度。

(2)获取客户端真实ip,支持ipv4和ipv6,使xff头的欺骗不能成功。

(3)在下载类资源,例如app、zip等文件资源时,插入随机文字修改文件md5值,以防止搜索引擎通过文件md5值建立索引库,从而保证自身文件安全和减少流量损失。

附图说明

构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明的防盗链的方法的流程图;

图2是根据本发明的防盗链的服务器的模块图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

本发明提供了一种防盗链的方法。如图1所示,该方法包括:

步骤101,服务器对一资源对应的统一资源定位符(url)中的时间戳进行加密,生成加密的统一资源定位符;

步骤102,接收客户端针对该资源的访问请求后,判断该访问请求中的时间戳是否过期,若判断过期,则拒绝该访问请求。

普通的防盗链url通常将时间戳作为明码传输,这样直接减小了盗链者破解密码的难度。因此,对url中的时间戳进行加密。在接收到客户端的访问请求后,对访问请求携带的cookie中的时间戳进行解密后,再判断该时间戳是否过期。

因此,判断所述访问请求中的时间戳是否过期包括:从所述访问请求携带的cookie中获取时间戳信息,对所述时间戳信息进行解密得到时间戳。

之前破解secret_string只需要迭代测试出secretkey就可以。现在加密了timestamp之后,盗链所需要猜测的字段是secretkey+timestring,即使破解出来,这个字段也是具有迷惑性的,即难以猜测出哪些部分是时间戳,哪些部分是密钥。

上述方法还包括:获取所述客户端的真实ip地址。并且,若判断所述访问请求中的时间戳不过期,则判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值是否一致,若不一致,则拒绝所述访问请求。其中,所述特征信息至少包括:所述客户端的真实ip地址。

上述操作是为了防止盗链者通过cookie进行欺骗以达到盗链的目的。进行盗链时,盗链者保存一份cookie,然后发给客户端,让客户端带着cookie直接发送访问请求。为了避免上述盗链,就需要获取客户端的真实ip地址,而不是获取client-ip头部(或者xff头部),从而避免盗链者伪造xff头部的风险。这里,可以通过调用real_ip模块获取客户端的真实ip(也可以调用实现相同功能的其他模块),即通过解析访问请求包来获取发出该请求的源地址。

另外,特征值可以是基于一些信息,通过设定算法计算得到的。例如,通过对真实ip地址、加密的时间戳、cookie名称、用户标识符、cookie加密密钥这些参数进行md5算法得到。上述中基于访问请求获取的特征值是由发出访问请求的客户端的真实ip计算得到的,基于特征信息计算得到的特征值也是由该客户端的真实ip计算得到的,在这种情况下,就是非盗链的访问请求。如果特征值是基于盗链者伪造的xff头部中的ip地址计算得到的,则该特征值就跟基于访问请求获取的特征值不相同,则拒绝该访问,从而避免盗链。

上述方法中,判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值是否一致包括:

获取所述访问请求携带的cookie中的md5值

基于特征信息通过md5算法计算第二md5值;

比较所述第一md5值与所述第二md5值是否一致;

其中,所述特征信息包括所述客户端的真实ip地址、加密的时间戳、cookie名称、用户标识符、cookie加密密钥。

这里的用户标识符是指使用客户端的一个用户标识符,例如注册并访问某个视频网站的用户账号。cookie加密密钥是服务器加密cookie时使用的密钥。

上述方法还包括:服务器在资源文件的设定位置插入随机生成的字段,生成新资源文件。在客户端向服务器发起请求时,服务器自动在文件中插入随机字符,字符大小是根据文件可修改的范围决定的,没有特别的限制,频率可以是周期性的(服务器性能越差,周期越长),大部分情况下是自由插入的,没有特定周期。

这种操作是为了防止下述的盗链情况发生:

服务器a.com上有a.txt文件,服务器b.com上有b.txt文件,a.txt文件与b.txt文件相同。客户端a从a.com上下载a.txt文件,客户端b从a.com上下载b.txt文件

(1)客户端a访问下载网站a.com使用迅雷等p2sp协议的引擎,下载引擎会收集下载地址ip和文件的md5值存入下载链接库。

(2)客户端b下载同一个文件,下载引擎就会比对文件md5,寻找后端的数据链接库中记录速度最快的服务器上下载。此时可能匹配的就是服务器a.com,就直接从a.com中获取文件。造成a.com网站本身的客户访问缺失,流量浪费。

这种下载机制对下载资源站形成了较大的流量压力,网站的流量消耗越来越多,但页面访问量却不增长,很多流量被大量下载引擎用户消耗了,就是下载资源常见的盗链情况。

那么,通过上述中资源文件的设定位置,例如头部、尾部,或中间位置,插入随机生成的字段,从而改变资源文件的md5值。改变文件md5值后的下载过程如下:

(1)客户端a、b各自访问文件资源a.txt和b.txt。

(2)a.com服务器在文件a.txt的头部或者尾部固定位置插入文本字段,该字段内容可以为随机生成,这样每次产生的文件md5都会不一样。此时搜索引擎中的索引库匹配时发现a.txt和b.txt的md5值不一样,就不会到服务器a.com上取数据,就解决资源被盗链的问题。

上述方法还包括:在判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值不一致并拒绝所述访问请求后,记录设定时间段内与所述访问请求相应的用户标识符被拒绝的总次数,判断所述总次数是否超过设定阈值,若超过,则拒绝与所述用户标识符相应的后续访问请求。其中,根据具体的情况,可以针对不同等级的用户设置不同的阈值,用户等级较时,设置较高的阈值,用户等级较低时,则设置较低的阈值。例如,当一用户标识符表示该用户为普通用户时,将该阈值设置为100次,当一用户标识符表示该用户为高级用户时,将该阈值设置为500次。

上述操作是当某一用户标识符多次的访问请求都被拒绝时,可以认定该用户标识符为盗链者,将该用户标识符加入黑名单中,进行封禁,从而扼杀盗链的问题。

步骤101中,对一资源对应的统一资源定位符中的时间戳进行加密包括:每隔设定周期变换所述时间戳的加密方式。这样可以增加时间戳被破解的难度。例如,设定的周期可以是一周。

另外,步骤101中,对一资源对应的统一资源定位符中的时间戳进行加密包括:将时间戳中的数字映射为26个英文字母,用对应的英文字母表示时间戳中的数字。加密方式如下面的映射表所示。

表1数字与26个字母映射表

例如url:http://www.123.com/secret_string/156060/uri,经时间戳加密后就得到了url:http://www.123.com/secret_string/aemsfs/uri

在表1所示的映射表中,一个数字可能对应多个不同的英文字母,在加密时,随机选择一个对应的英文字母即可。在每个设定周期更换加密方式时,更换上述映射表中的映射关系即可,并且这种更换可以采用随机方式进行。这样直接增加破解难度,且操作简便就能达到增加指数级别的难度。

下面详细描述根据本发明的具体实施例,该实施例包括下述步骤:

步骤一,服务器对一个文件下载资源对应的url中的时间戳进行加密,其中采用表1中的映射关系进行加密:

原url:http://www.123.com/secret_string/156060/uri

时间戳加密后url:http://www.123.com/secret_string/aemsfs/uri

步骤二,服务器接收到客户端a针对该文件下载资源的访问请求。

步骤三,服务器调用real-ip模块,获取客户端a的真实ip地址。

步骤四,服务器对访问请求携带的cookie中的时间戳进行解密,并判断该时间戳是否过期,若判断过期,则拒绝该访问请求,若判断没有过期,则执行下一步。

步骤五,服务器生成函数set_cookie((md5sum(cookie_name,real-ip,userid,secret-key),current-time,maxage=86400,httponly=true)),参数一一对应下述含义:cookie名字,真实ip,用户标识符和密钥,当前时间(采用表1映射关系加密后对应成字符串),cookie的过期时间,匹配协议,基于上述函数中的参数计算第二md5值。

步骤六,基于接收的访问请求携带的cookie获取第一md5值。

步骤七,判断第一md5值是否与第二md5值相同,若不相同则拒绝该访问请求。

本发明还提供了一种防盗链的服务器,所述服务器包括:

加密模块201,用于对一资源对应的统一资源定位符中的时间戳进行加密,生成加密的统一资源定位符;

接收模块202,用于接收客户端针对所述资源的访问请求;

判断模块203,用于判断所述访问请求中的时间戳是否过期;

执行模块204,用于当判断所述时间戳过期时,拒绝所述访问请求。

其中,所述服务器还包括:

获取模块,用于获取所述客户端的真实ip地址;

所述执行模块还用于当判断所述访问请求中的时间戳不过期时,则判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值是否一致,若不一致,则拒绝所述访问请求,

其中,所述特征信息至少包括:所述客户端的真实ip地址。

其中,所述服务器还包括:

服务器在资源文件的设定位置插入随机生成的字段,生成新资源文件。

其中,所述执行模块204还用于:

在判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值不一致并拒绝所述访问请求后,记录设定时间段内与所述访问请求相应的用户标识符被拒绝的总次数,判断所述总次数是否超过设定阈值,若超过,则拒绝与所述用户标识符相应的后续访问请求。

其中,所述加密模块201还用于:

将时间戳中的数字映射为26个英文字母,用对应的英文字母表示时间戳中的数字;

并且,每隔设定周期变换所述时间戳的加密方式。

其中,所述获取模块还用于:

通过调用real_ip模块获取所述客户端的真实ip地址。

其中,所述执行模块204还用于通过下述方式判断基于所述访问请求获取的特征值与基于特征信息计算得到的特征值是否一致:

获取所述访问请求携带的cookie中的md5值;

基于特征信息通过md5算法计算md5值;

比较所述cookie中的md5值与计算的md5值是否一致;

其中,所述特征信息包括所述客户端的真实ip地址、加密的时间戳、cookie名称、用户标识符、cookie加密密钥。

本发明中的防盗链技术,具有下述优点:

(1)将时间戳作为加密串,直接指数级增加爆破密钥的难度。

(2)获取客户端真实ip,支持ipv4和ipv6,使xff头的欺骗不能成功。

(3)在下载类资源,例如app、zip等文件资源时,插入随机文字修改文件md5值,以防止搜索引擎通过文件md5值建立索引库,从而保证自身文件安全和减少流量损失。

上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的物品或者设备中还存在另外的相同要素。

以上实施例仅用以说明本发明的技术方案而非限制,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1