网站资源被盗链的:预防方法 VS 网站资源防盗链的:破解技巧

资源被盗链:(简明定义)

下载者不是从你的网站直接下载资源,而是通过其他盗链网站提供的你的下载资源链接进行下载你的服务器资源!

http://baike.baidu.com/view/272422.htm

一》预防方法:

方法1:判断引用地址
这个方法是最早及最常见的方法。所谓判断引用地址,就是判断浏览器请求时HTTP头的Referer字段的
值,这个值在asp.net里面可以用 Request.UrlReferrer属性取得。几个例子来说,在正常情况下当用户在浏览
http://uushare.com/abc.html 时点击一个链接去到 http://uushare.com/jacky.mp3
文件时,浏览器在发出请求jacky.mp3
资源时还会附带当刻浏览器所处的页面地址(即http://uushare.com/abc.html),所以当你的网站程序接收到下载
jacky.mp3 资源请求的时候,先判断http的referer字段的值,如果是从
自己的域名(uushare.com)过来的,则可以认为是合法的连接请求,否则就返回一个错误的提示信息。

这种方法通常用于图片、
mp3这种容易被人用html“嵌入”到其他网站的资源,使用这种方法可以防止你的图片直接出现在别人的网页里(或者防止mp3直接被其他网站嵌入到
flash播放器里),不过访客使用下载工具还是可以轻松下载,因为现在的下载工具一般会自动用你的域名构造一个引用地址,所以如果想再进一步防范的话,
可以使用一个对应表限制每个资源的引用地址,例如将 jacky.mp3 的引用地址限制为
http://uushare.com/abc.html?id=12345,这样下载工具就不太可能构造一个“正确”的引用地址了。

方法2:使用登录验证

个方法常见于论坛、社区。当访客请求网站上的一个资源时,先判断此请求是否通过登录验证(在asp.net里常用session或form验证来记录登录
状态),如果尚未登录则返回一个错误提示信息。使用这个方法还可以进一步判断登录的用户的权限是否足够,以实现带“权限”的下载。
不过因为登录状
态依赖于会话id,而会话id往往储存于http请求的cookie字段里,下载工具一般没法获得浏览器的cookie字段,所以这些资源往往无法使用下
载工具来下载,给正常合法用户带来诸多不便(因为大部分网民的系统都安装了下载工具,一点击下载链接一般会被下载工具拦截,导致无法使用浏览器本身的下载
功能)。简单的解决方法是将这个session id放到URL中。
这种方法的另外一个缺点是访客无法匿名下载,所以这个方法一般只用于论坛和社区网站。

方法3:使用cookie

实这种方法原理上跟方法2差不多。就是在显示“下载”链接的页面里产生一个动态值的cookie,然后在处理资源下载请求时先判断cookie里有没有正
确的cookie,如果没有则返回错误提示信息。至于这个动态值如何产生,只要能逆向判断动态值是否合法的都可以,例如将当前的时间去除秒数取哈希值(也
叫散列值)。如果网页程序是asp.net则更简单,可以往Session里随便存一个字符串或数字,然后在处理下载请求时先检查Session里是否存
在这个字符串或数字。使用这个方法的缺点跟方法2一样。

方法4:使用POST下载
客户端浏览器请求资源都是使用
HTTP的GET方法的,其实使用POST方法也可以往客户端返回数据。所以可以将下载链接换成一个表单(Form)和一个按钮(Submit),将待下
载的文件的名称或id放到表单的一个隐藏文本框(Input)里,当用户点击提交按钮时,服务程序先判断请求是否为POST方式,如果是则读取目标资源的
二进制数据并写入响应对象(在asp.net里是respone.BinaryWrite方法)。
使用这个方法的缺点同样是无法使用下载工具,更没法实现断点续传。 不过比方法2,3好一点的是,下载工具不会拦截你的下载动作,所以正常用户还是比较顺畅地下载到文件。这个方法比较适合小文件的下载。

方法5:使用图形验证码
使用这个方法可以保证每次下载都是“人”在你的网站上下载,而不是下载工具。因为网上很多介绍使用图形验证码的方法,所以这里就不再重复了。这个方法的缺点是比较容易让正常的用户感到麻烦。

方法6:使用动态文件名

叫动态钥匙法,当用户点击一个下载链接时,先在程序端计算一个Key(使用一定规律产生的Key,最好不要使用随机字符串例如GUID,并且这个Key必
须有一定时效的),然后在数据库或Cache里记录这个Key以及它所对应的资源ID或文件名,最后让网页重定向一个新的URL地址,这个新URL地址里
需要包含这个Key。当浏览器或下载工具发出下载请求时,程序先检测这个Key是否存在,如果存在则返回对应的资源数据。
使用这个方法的好处是下载工具也可以下载,并且在Key失效前可以断点续传,并且可以通过Key来控制下载的线程数。

使
用这个方法(包括以上所有支持下载工具的方法)的缺点是:当任意一个用户下载成功之后,你的资源就会被一些下载工具列入“资源候选名单”,以后其他人在其
他地方下载同样的文件时,下载工具会不断连接你的服务器,即使你的文件已经删除或者Key已经失效了,这样会造成类DDos攻击的后果,下面再介绍两个即
可以让下载工具下载,又可以防止盗链的方法。

方法7:擅改资源的内容
一般热门的资源都是电影、mp3、较大的压缩
包等,这些文件都是有很多可以插入数据的地方的,例如mp3有一个tag区,rar/zip有一个备注区,电影的内容随便一个地方,只要在下载过程当中,
动态地往这些地方注入一些随机的字节(几个字节即可),就可以达到让整个文件的哈希值(即散列值、指纹值)发生改变,让从你网站下载的文件的哈希值跟别人
的不一样,就可以防止下载工具主动找上门了。用这个方法配合方法6,可以达到较好的防盗链的效果。缺点是,虽然文件被修改的部分不会被“看”、“听”出
来,不过多多少少让知道的人觉得不爽。另外就是如果别人把从你网站下载的文件放到其他网站,那么仍然存在下载工具主动找上门的情况(虽然实际上它下载不了
内容)。

方法8:打包下载
这个方法跟方法7的道理是一样的,只不过这次不是往原始文件里修改,而是在原始的文件基
础上再加个“外壳”,让资源的哈希值跟别人的不一样。使用这个方法可以在不擅改资源原始的内容基础上实现方法6同样的效果,并且狠一点的话,甚至可以在打
包的时候放入自己的一些广告。缺点是用户每次下载都得加压缩,不过目前大部分人都懂得解压,所以这个缺点有时可以忽略不计。

http://blog.csdn.net/zhanglei5415/article/details/3611365

二》破解技巧:(原创)

方法1:browser > source codes > edit as html

方法2:编写javascript 爬虫,拼凑,收集有关资源链接

express 防盗链模块:

安装

npm install express-anti-leech

使用

var express = require(‘express‘),
  path = require(‘path‘),
  app = express();

var AntiLeech = require(‘express-anti-leech‘);

// 允许引用的域名白名单
var hosts = [‘localhost‘, ‘localhost:8004‘];

// 反盗链类型
var exts = [‘.png‘, ‘.jpg‘, ‘.jpeg‘, ‘.gif‘, ‘.swf‘, ‘.flv‘];

// 盗链默认指向图片
var pictrue = "/images/default.png";

app.use(AntiLeech({
  allow: hosts,
  exts: exts,
  log: console.log, // 你也可以使用自己的方法来记录
  default: pictrue
}));

// 请在调用静态资源之前先使用反盗链模块
app.use(express.static(path.join(__dirname, ‘public‘)));
app.set(‘port‘, process.env.PORT || 8004);

app.get(‘/‘, function(req, res) {
  res.redirect("/index.html");
});

app.listen(app.get(‘port‘), function() {
  console.log("Express test server listening on http://localhost:" + app.get(‘port‘));
});

测试效果图:

localhost:8004 在白名单之中,而 127.0.0.1:8004 不在白名单中,所以 localhost:8004 下访问正常,而 127.0.0.1:8004 下则被重定向到指定的图片。

Nginx 反盗链设置:

防止盗链不仅能保护版权,又节约了不少流量。最近和bsdmap交流了下,听说他们通过防盗链节约了近1/3的图片流量。nginx的防盗链设置还是比较简单的,可以分为普通防盗链和ip/cookie based防盗链。其中ip based防盗链需要安装nginx的module,所以相对麻烦一些。
nginx最简单的防盗链设置如下

  location ~* .(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.jefflei.com;
if ($invalid_referer) {
return 403;
}
}
通过nginx的重定向方式返回403错误。
NginxHttpAccessKeyModule实现防盗链

  需要先安装nginx的NginxHttpAccessKeyModule模块。其运行方式是:如我的nginx目录下有一个 file.gz 的文件。对应的URI 是http://www.jefflei.com/nginx/file.gz
若用ngx_http_accesskey_module 后则根据用户的IP生成一个key值,如下的链接来访问http://www.jefflei.com/download/file.zip?key=23497sdf897. 只有给定的key值正确了,才能够下载nginx目录下的file.gz,这样就可以避免被盗链了。

浅谈网站防盗链技术:

一、 初级 -- 经常更换音乐文件及其所在文件夹的名称。

这种方法最简单,最原始,只要发现服务器流量不正常了,就把后台打开点击更新资源地址,程序就自动修改资源名称。这样一来被盗链的地址就马上失效了。 
   缺点:由于资源够多,更新起来很占服务器资源,时间够长到后来,每更新一次几乎要用一个通宵。而且由于当时程序处理不够周密,每更新一次基本上都会出现一些错误链接。而且一更新了地址照样基本被盗链。

二、普通级 -- 隐藏音乐文件的真实地址,这个方法大家都想到过吧,:) 。制作方法是通过脚本运算或者加密码来给查找真实地址制造麻烦。就拿mp3播放来说吧,我所使用的方法是这样比如play.asp 是播放器页面,在服务器运算的时候放取得真实地址,把这个地址写入session[地址]中保存, play.asp根本不出现这是的资源地址,play.asp下载完成后立即会加载url.asp脚本文件,在url.asp中检测是否有session[地址]有就写如脚本,并且立即清除该值。没有就不作任何输出。这样处理在播放页效果比较好,但是在下载页就不这么好隐藏了,而且只要用户安装了讯雷软件,鼠标移动到播放器上真实地址力马就显示出来了。而且本人认为只要是能给客户端提供正常服务器的,基本上不可能做到隐藏。除非不提供服务。否则随便找个抓包软件一抓就出来了。

三、中量级 -- 用asp.net拦截httpHandlers,该方法和拦截IIS的ISAPI插件基本上是一个原理。作为资源下载站,根本不用隐藏真实地址,就算完全暴露在外,其他站长把地址放到他的站上点击就会失效。原理是:通过链接请求的来路判断是否为盗链。如果来路不符合要求则表示该请求为盗链的,马上终止就可以了。这种方式相对前面两种方法来说防盗技术已经跨越了一个质的飞跃过程了。效果非常好。现在使用这种方式防盗的软件非常多,比如最出名的免费软件re_writer等。但是美中不足的是:如果象54star.net 这样的音乐站,要提供在线试听功能,而经检测播放器请求的来路是空的,也就是说要提供在线试听服务器,必须把来路为空也视为合法。这样一来,盗链的链接通过工具下载或者点右键-》另存为的已经其他站的播放器直接链接也是合法的。没有完全达到防盗的效果。

四、重量级 -- 通过密匙验证,使用的原理和方法三很相识,一样是拦截IIS,但不同的是,拦截的不是来路,而是地址后面的一串参数---经过加密处理后的密匙。其他密匙的原理和现在的在线支付系统一样,在线支付系统后台都要设置一个密码,在你的网站上也要设置一个同样的密码,表单提交来往的过程中判断是否合法全靠它了。使用这种方法防盗链的加密防止通常是这样 密匙 = 加密函数(客户端IP + 密码). 最后生成的地址形如:http://down.54star.net:89/cd/js-bksyjx/02.mp3?5335aaf7dec19388b7bb799dd70482e,问号前面的时候真实地址,后面那串东西就是密匙,判断是否合法就是通过判断它是否正确了。想盗本站资源的难度就形如要去破解一个未知长度,而且随时可以更改的密码是一样的。这种方法可以说在几种防盗技术中可以勘称最完美的了。而且资源服务器和网站服务器可以分开拜访。如果要提供给友情站使用,只需要把密匙告诉他即可。

五、超重量级 -- 经管使用方法四已经几乎达到完美了,但是该防盗方法唯一美中不足的就是性能了。一般下载站都是使用HTTP协议提供下载,IIS的功能很强大,会ASP。NET的都知道其三层结构,其处理机制很庞大。所以,如果仅仅是把IIS当作下载资源服务器的话有些让IIS不堪重负了。象54star.net这个站就发现,只要下载的人稍微一多IIS占用资源非常高,而且IIS的可以并发的数量并不多,只要一超过一定数量,就会出现各种各样的问题。比如提示服务器太忙这种问题你也经常遇到吧。所以在这里推荐给你一个新出品的免费软件:思达防盗链下载专用服务器软件,下载地址是http://54star.net/downserver/,这个软件不仅使用方法四通过密匙的方式来防止盗链。更优秀的是它完全从IIS中脱离了出来,一心一意地处理文件的下载服务器。从下载速度、占用资源已经并发数量等参数来说它都是最优秀的免费软件。我朋友的音乐站自从使用了这套系统以后一下子稳定起来了。所以在这里向大家强烈地推荐使它。另外这个软件是.net1.1写的,所以只能在windows2000,windows2003或者装有.net framework1.1的操作系统上运行。文件非常小,只有54K、无需安装。

时间: 2024-10-26 21:20:31

网站资源被盗链的:预防方法 VS 网站资源防盗链的:破解技巧的相关文章

asp.net MVC 网站图片防盗链的几种方法

目录 1. 通过 URL Rewrite Module 组件 2. 通过 nginx 图片防盗链 3.自定义 HttpHandler 处理 4. 通过 MVC 自定义路由规则防盗链 5. 通过 MVC 自定义 RouteHandler 防盗链 6. 通过 HttpModModule 防盗链 7. 涉及知识点,相关资源 自己网站上的图片被别的网站盗用是一件很令人厌恶的事情,下面是处理图片盗链的几种方法. 在这里先交代一下环境,我用的是 MVC4 ,IIS7 应用程序池为集成模式,以下配置都是基于此

使用Application.GetResourceStream方法加载资源时得到的总是null

我们可以预先把程序中用到的资源,如图片,音乐等放入项目中,打包进XAP文档,需要的时候从中调用.下面就说说具体实现方法. 第一步,把数据存进项目. 1.右键点击项目名称-添加-新建文件夹(英文版请自行翻译),这里文件夹名以image为例,把需要的图片拖进来,当然你也可以不建,直接把图片拖到项目项目录下, 2.选中刚刚拖进去的图片,看右下角的属性标签,如果没有,右键点图片,选属性.生成操作选Resource. 第二步,程序调用. System.IO.Stream src = Application

apache web服务器与防盗链的设置

一.安装apache2.4.23 新版本的httpd-2.4新增以下特性: 新增模块: mod_proxy_fcgi(可提供fcgi代理) mod_ratelimit(限制用户带宽) mod_request(请求模块,对请求做过滤) mod_remoteip(匹配客户端的IP地址) 对于基于IP的访问控制做了修改,不再支持allow,deny,order机制,而是统一使用require进行 还新增以下几条新特性: 1.MPM支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能: --

Nginx服务之防盗链功能

Nginx防盗链 一.原理 二.配置指令 三.实例配置 一.原理 盗链是一种损害原有网站合法利益,给原网站所在服务器造成额外负担的非法行为.要采取防盗链的措施,首先需要了解盗链的实现原理. 客户端向服务器请求资源时,为了减少网络带宽,提高响应时间,服务器一般不会一次将所有资源完整地传回给客户端.比如在请求一个网页时,首先会传回该网页的文本内容,当客户端浏览器在解析文本的过程中发现有图片存在时,会再次向服务器发起对该图片资源的请求,服务器将存储的图片资源再发送给客户端.在这个过程中,如果该服务器上

流媒体直播防盗链安全控制

       防盗链概念主要是从网站的业务中起来,原有定义只要针对网站内容中的文字,图片被他人非法使用导致,随着网站内容的逐渐丰富,出现了更多音乐,视频,flash等方面内容,同时针对防盗链的技术要求也在不断加强.        视频直播业务的要求在这方面会更加重要,举例来说,一个教育网站,老师的实时授课视频,如果未经过授权,就被其他网站非法接入,在其他网站就可以随意的观看,这对于经营者来说,将是巨大的损失.如果一个现场的演唱会直播,同样在未经过授权的情况下,就可以被他人接入观看,那演唱会的销售

nginx之旅(第二篇):nginx日志管理、nginx防盗链、nginx虚拟主机

一.nginx日志管理 Nginx访问日志主要有两个参数控制 1) log_format #用来定义记录日志的格式(可以定义多种日志格式,取不不同名字即可) log_format log_name string 2) access_log #用来指定日至文件的路路径及使用的何种日志格式记录日志 access_log logs/access.log main; log_format格式变量含义: 字段 含义 remote_addr 客户端地址 remote_user 客户端用户名 time_loc

Server-直播码安全保护(安全防盗链)

功能介绍 所谓安全防盗链,是一种加了防盗链签名的URL,经过签名的URL能够跟阿麦打流服务器的安全机制进行配合,可以将URL的使用权限定在您的APP上,恶意第三方拿到URL也不能使用和传播. (1)推流 - 推流URL加防盗链的必要性极高,尤其是在直播码跟用户ID(或者DB ID)绑定的情况下,因为客户的直播码ID很容易被攻击者窃取,进而伪装客户自己进行抢占式推流,所以为推流URL增加防盗链签名,确保只有真正的客户主人自己才能在登录后拿到防盗链签名非常有必要. (2)播放 - 播放URL加防盗链

使用Apache的.htaccess就可以防盗链

Apache的.htaccess可以实现很多功能,如密码保护.禁止显示目录列表.阻止/允许特定的IP地址.实现网址的301 重定向等等.本文就来说说使用Apache的.htaccess如何防盗链. 当然防盗链可以用程序解决,如PHP: $referer = $_SERVER['HTTP_REFERER']; $selfurl = $_SERVER['HTTP_HOST']; if(false == strpos($referer,$selfurl)){ echo 'phpddt.com防止非法盗

Linux学习总结(三十六)lamp之配置防盗链

一配置防盗链 referer,中文释义为来源,也就是在说网站从哪里访问过来,在访问日志里,它指的是不同网站之间的跳转链接信息.也就是跳转源的网址.虽然直接在浏览器输入某个站点,跟从其他网站打开该网站,我们感受到的效果没有差别,但是服务器端会记录一个跳转信息,他就是一个referer,如果没有经过跳转,则是一个空的referer.这样我们统计该referer信息,就能统计出某个网站对于我们网站的流量贡献. 防盗链机制就是通过referer的控制,拒绝跳转访问我们自己认为的稀缺资源.比如,淘宝网商之