一种网站静态资源防盗链方法技术

技术编号:23152970 阅读:32 留言:0更新日期:2020-01-18 14:55
本发明专利技术公开了一种网站静态资源防盗链方法,其特征在于,步骤1:初始化阶段;步骤2:通过触发器建立事件与函数关联;步骤3:在请求报文中的请求头中新增自定义“Referer‑Host”标头和标头的内容;步骤4:检查缓存区内是否存在对该请求的回应;步骤5:源站点将Referer‑Host标头的内容值与本地存储的合法域名进行比对;步骤6:源站点根据域名类型执行相应操作;步骤7:建立静态资源请求与响应间的对应关系;步骤8:将响应内容发送至HTTP客户端。本发明专利技术可以达到以低成本少配置的方式构建防盗链,减少因频繁请求源站点而对后端服务器产生压力的效果。

【技术实现步骤摘要】
一种网站静态资源防盗链方法
本专利技术属于互联网
,具体涉及一种网站静态资源防盗链方法。
技术介绍
静态资源(一般是js、css、视频、下载资源)防盗链一直是个难题,网站上的静态资源如果不做防盗链,可以被互联网上任意网站引用,可能被同行或者竞争对手引用,甚至可能被黄赌毒网站引用,google等搜索引擎会认为静态资源链接为恶意资源,从而影响静态资源域名链接,可能会影响网站推广效果,所以静态资源防盗链很必要。最简单的静态资源防盗链方法是能保证引用静态资源的域名固定或者访问者IP固定,这样只需限制静态资源请求的来源域名或可信任IP白名单即可阻止恶意的静态资源访问。但实际上系统平台上引用静态资源的域名数量根本不可控,访问IP更是无法预测,最简单的防盗链情况适用于个人站或者小的系统平台,但无法应对访问量大或者访问情况复杂的平台防盗链任务。系统平台为保证较高的静态资源访问速度,一般都选择接入CDN(全称是ContentDeliveryNetwork,即内容分发网络),CDN专门负责内容的分发,其内涉及大量的内容资产,防盗链是CDN不可或缺的组成部分。通常CDN防盗链方法有3种:(1)referer防盗链:通过配置访问的referer黑白名单来对访问者身份进行识别和过滤,从而限制资源被访问的情况;然而平台客户域名多变且不固定,cdn上提供的referer防盗链都有来源域名数量限制,很容易超出数量上限,不适合通过referer来防盗链;(2)IP黑白名单防盗链:通过定义IP黑白名单,对列入黑名单的用户IP阻止访问,然而网站访问者IP根本无法确定,此方法并不适用;(3)URL鉴权防盗链:属于高级防盗链,设置鉴权Key对URL加密,保护用户源站资源,然而系统平台静态资源链接不适合涉及失效时间的防盗链。目前主流cdn(阿里cdn、腾讯cdn,百度cdn)防盗链能够解决大部分客户需求,但无法满足系统平台的防盗链需求。实际上也可自建cdn服务,这样可以定制防盗链功能满足个性化要求,但自定义cdn服务成本太大,投入产出不成正比,而且还需要必要的技术储备,实现难度较大。
技术实现思路
本专利技术所要解决的技术问题是克服现有技术的不足,提供一种网站静态资源防盗链方法,具体步骤包括:步骤1:初始化阶段;按照Amazoncloudfront服务配置过程,将网站静态资源域名链接接入CloudFront;在CloudFront处设置静态资源非法访问的错误响应及错误响应缓存时间;在CloudFront的白名单标头名单中添加“Referer-Host”标头;以HTTP状态码标识响应状态,所述响应状态包含正确响应和错误响应;所述错误响应分为短期拒绝访问的错误响应和长期拒绝访问的错误响应,所述“短期拒绝访问”中错误响应的缓存时间比“长期拒绝访问”中错误响应的缓存时间短;步骤2:使用Nodejs编制Lambda@Edge函数并设置函数执行时间;Lambda@Edge函数获取请求报文中的请求头,并提取请求来源的域名作为“Referer-Host”标头的内容;通过CloudFront触发器建立CloudFront事件与Lambda@Edge函数关联,设置函数在CloudFront接收到用户http请求时执行域名提取;步骤3:通过Lambda@Edge函数的执行,在请求报文中的请求头中新增自定义“Referer-Host”标头和标头的内容;步骤4:根据Referer-Host字段内容和请求获取的静态资源,CloudFront检查缓存区内是否存在对该请求的回应,如若存在,将回应返回至浏览器端;如若不存在,执行步骤5;其中,缓存区中的请求的回应包括错误回应和正确回应,所述错误回应是反馈错误响应的http状态码;所述正确回应是请求获取的静态资源;步骤5:根据静态资源域名链接,CloudFront将资源访问请求转发至静态资源源站点,源站点将Referer-Host标头的内容值与本地存储的合法域名进行比对,如在合法域名中找到Referer-Host标头的内容,则比对成功,请求源域名(请求来源的域名地址)合法,返回静态资源;如若在合法域名中没有找到Referer-Host标头的,继续执行Referer-Host标头的内容与本地存储的黑名单域名的比对,如若在黑名单域名找到Referer-Host标头的内容,则请求源域名为恶意域名;如若没有找到,请求源域名为不合法域名;步骤6:源站点根据域名类型执行相应操作;针对合法请求源域名,访问视为合法,源站点将用户所需的静态资源返回至CloudFront,同时在返回的响应头中添加缓存控制字段,所述缓存控制字段为cache-control,字段内容是静态资源在CloudFront中的缓存时间,所述缓存时间根据源站点静态资源的更新周期确定;针对恶意域名,视为非法访问,源站点在返回的响应头中设置“长期拒绝访问”的错误回应码,针对不合法域名,视为非法访问,源站点在返回的响应头中设置“短期拒绝访问”的错误回应码;步骤7:CloudFront接收到响应头后,建立静态资源请求与响应间的对应关系,并将对应关系存入CloudFront边缘缓存区;根据缓存控制字段内容,将缓存字段指定的缓存时间设为对应关系在CloudFront边缘缓存区的缓存时间;步骤8:CloudFront将响应内容发送至HTTP客户端,如若是合法访问,将接收到静态资源发送至HTTP客户端;如若是非法访问,直接返回错误响应码给HTTP客户端。所述步骤1中,所述短期拒绝访问的错误响应是指针对白名单和黑名单中都没有记录的请求源域名做出的反应,缓存时间范围定在3天至7天;所述长期拒绝访问的错误响应是针对黑名单中记录的请求源域名做出的反应,缓存时间范围定在半年至一年。所述步骤3的Lambda@Edge函数执行过程包括:终端用户通过浏览器访问包含静态资源链接的网页,点击链接触发静态资源访问请求的发送,待浏览器获取到请求转送至CloudFront时,触发Lambda@Edge函数执行;Lambda@Edge函数提取http请求头中Referer-Host标头的内容标头值,对其执行正则处理后得到请求源域名;在http请求头中新增Referer-Host标头,将得到的请求源域名作为Referer-Host标头的内容。所述步骤1中,“短期拒绝访问”的http状态码设为错误400,结合白名单更新周期,在不影响请求源域名对静态资源源站点正常访问情况下,选择时间范围内的最长时间作为缓存时间,缓存时间选择最长时间,设置为7天;“长期期拒绝访问”的Http状态码设为错误405,结合黑名单域名更新周期,同时降低静态资源源站点对黑名单域名的请求处理次数,错误缓存时间选择最长时间,设置为1年;所述步骤6中,“长期拒绝访问”错误响应码和“短期拒绝访问”错误响应码均与步骤1配置在CloudFront的错误响应码一致。所述步骤7具体为:针对合法访问的正确响应,请求来源域名与请求的静态资源之间建立一一对应的关系,对应关系在缓存区内的有效本文档来自技高网
...

【技术保护点】
1.一种网站静态资源防盗链方法,其特征在于,包括如下步骤:/n步骤1:初始化阶段;按照Amazon cloudfront服务配置过程,将网站静态资源域名链接接入CloudFront;在CloudFront处设置静态资源非法访问的错误响应及错误响应缓存时间;在CloudFront的白名单标头名单中添加“Referer-Host”标头;以HTTP状态码标识响应状态,所述响应状态包含正确响应和错误响应;所述错误响应分为短期拒绝访问的错误响应和长期拒绝访问的错误响应,所述“短期拒绝访问”中错误响应的缓存时间比“长期拒绝访问”中错误响应的缓存时间短;/n步骤2:使用Nodejs编制Lambda@Edge函数并设置函数执行时间;Lambda@Edge函数获取请求报文中的请求头,并提取请求来源的域名作为“Referer-Host”标头的内容;通过CloudFront触发器建立CloudFront事件与Lambda@Edge函数关联,设置函数在CloudFront接收到用户http请求时执行域名提取;/n步骤3:通过Lambda@Edge函数的执行,在请求报文中的请求头中新增自定义“Referer-Host”标头和标头的内容;/n步骤4:根据Referer-Host字段内容和请求获取的静态资源,CloudFront检查缓存区内是否存在对该请求的回应,如若存在,将回应返回至浏览器端;如若不存在,执行步骤5;其中,缓存区中的请求的回应包括错误回应和正确回应,所述错误回应是反馈错误响应的http状态码;所述正确回应是请求获取的静态资源;/n步骤5:根据静态资源域名链接,CloudFront将资源访问请求转发至静态资源源站点,源站点将Referer-Host标头的内容值与本地存储的合法域名进行比对,如在合法域名中找到Referer-Host标头的内容,则比对成功,请求源域名(请求来源的域名地址)合法,返回静态资源;如若在合法域名中没有找到Referer-Host标头的,继续执行Referer-Host标头的内容与本地存储的黑名单域名的比对,如若在黑名单域名找到Referer-Host标头的内容,则请求源域名为恶意域名;如若没有找到,请求源域名为不合法域名;/n步骤6:源站点根据域名类型执行相应操作;针对合法请求源域名,访问视为合法,源站点将用户所需的静态资源返回至CloudFront,同时在返回的响应头中添加缓存控制字段,所述缓存控制字段为cache-control,字段内容是静态资源在CloudFront中的缓存时间,所述缓存时间根据源站点静态资源的更新周期确定;针对恶意域名,视为非法访问,源站点在返回的响应头中设置“长期拒绝访问”的错误回应码,针对不合法域名,视为非法访问,源站点在返回的响应头中设置“短期拒绝访问”的错误回应码;/n步骤7:CloudFront接收到响应头后,建立静态资源请求与响应间的对应关系,并将对应关系存入CloudFront边缘缓存区;根据缓存控制字段内容,将缓存字段指定的缓存时间设为对应关系在CloudFront边缘缓存区的缓存时间;/n步骤8:CloudFront将响应内容发送至HTTP客户端,如若是合法访问,将接收到静态资源发送至HTTP客户端;如若是非法访问,直接返回错误响应码给HTTP客户端。/n...

【技术特征摘要】
1.一种网站静态资源防盗链方法,其特征在于,包括如下步骤:
步骤1:初始化阶段;按照Amazoncloudfront服务配置过程,将网站静态资源域名链接接入CloudFront;在CloudFront处设置静态资源非法访问的错误响应及错误响应缓存时间;在CloudFront的白名单标头名单中添加“Referer-Host”标头;以HTTP状态码标识响应状态,所述响应状态包含正确响应和错误响应;所述错误响应分为短期拒绝访问的错误响应和长期拒绝访问的错误响应,所述“短期拒绝访问”中错误响应的缓存时间比“长期拒绝访问”中错误响应的缓存时间短;
步骤2:使用Nodejs编制Lambda@Edge函数并设置函数执行时间;Lambda@Edge函数获取请求报文中的请求头,并提取请求来源的域名作为“Referer-Host”标头的内容;通过CloudFront触发器建立CloudFront事件与Lambda@Edge函数关联,设置函数在CloudFront接收到用户http请求时执行域名提取;
步骤3:通过Lambda@Edge函数的执行,在请求报文中的请求头中新增自定义“Referer-Host”标头和标头的内容;
步骤4:根据Referer-Host字段内容和请求获取的静态资源,CloudFront检查缓存区内是否存在对该请求的回应,如若存在,将回应返回至浏览器端;如若不存在,执行步骤5;其中,缓存区中的请求的回应包括错误回应和正确回应,所述错误回应是反馈错误响应的http状态码;所述正确回应是请求获取的静态资源;
步骤5:根据静态资源域名链接,CloudFront将资源访问请求转发至静态资源源站点,源站点将Referer-Host标头的内容值与本地存储的合法域名进行比对,如在合法域名中找到Referer-Host标头的内容,则比对成功,请求源域名(请求来源的域名地址)合法,返回静态资源;如若在合法域名中没有找到Referer-Host标头的,继续执行Referer-Host标头的内容与本地存储的黑名单域名的比对,如若在黑名单域名找到Referer-Host标头的内容,则请求源域名为恶意域名;如若没有找到,请求源域名为不合法域名;
步骤6:源站点根据域名类型执行相应操作;针对合法请求源域名,访问视为合法,源站点将用户所需的静态资源返回至CloudFront,同时在返回的响应头中添加缓存控制字段,所述缓存控制字段为cache-control,字段内容是静态资源在CloudFront中的缓存时间,所述缓存时间根据源站点静态资源的更新周期确定;针对恶意域名,视为非法访问,源站点在返回的响应头中设置“长期拒绝访问”的错误回应码,针对不合法域名,视为非法访问,源站点在返回的响应头中设置“短期拒绝访问...

【专利技术属性】
技术研发人员:杨开森任睿
申请(专利权)人:南京焦点领动云计算技术有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1