防盗链技术终极解决方案(squid+cookie)

防盗链技术现状:
1、通过识别Referer确认请求来源页面
2、Apache,squid等都能对Referer进行识别
3、通过ActiveX显示的内容不向服务器提供Referer Header(例如,Flash,WindowsMedia视频
等)
4、流媒体的RTSP协议也不向服务器提供Referer Header
5、通过服务器端程序代码实现
防盗链应用现状:
1、对图片、HTML等可以实现防盗链
2、无法对Flash,WindowsMedia视频
(MMS,RTSP)实现防盗链
3、服务器端程序代码实现的防盗链无法通过CDN加速
对于Flash,WindowsMedia视频
这种占用流量较大的服务无法实现防盗链,对一个依靠这类内容作为盈利点的网站来说是非常头疼的,俺通过一些研究以及测试实现了采用Cookie技术的防盗链解决方案,完美的解决了对Flash,WindowsMedia视频
的防盗链。
首先发现虽然ActiveX插件不传递Referer,但是却忠实的传递Cookie。于是在显示ActiveX的页面的<head> </head>标签内嵌入一段代码:
<script> document.cookie=”Cache=vod;domain=domain.com;path=/”; </script>
这段代码用 javascript 设置了一段 Cookie: Cache=vod
然后通过各种ACL来判断这个Cookie的存在以及验证其值的操作了
Squid:
建立脚本 /usr/local/squid/libexec/squid_cookie.pl
———–
#!/usr/bin/perl -w
# 这个脚本仅仅是验证了Cache这个cookie的存在,没有严格的校验其值。
# This is the cookie to check for.
$COOKIE=”Cache=”;
# disable output buffering
$|=1;
# cookie matches?
while (<STDIN>) {
chop;
$cookie=$_;
if( $cookie =~ /$COOKIE/i) {
     print “OK\n”;
} else { print “ERR\n”; }
}
———–
然后在squid.conf添加:
external_acl_type download children=15 %{Cookie} /usr/local/squid/libexec/squid_cookie.pl
acl dl external download
然后选择需要进行防盗链的文件类型:
acl filetype url_regex -i \.wmv
acl filetype url_regex -i \.wma
acl filetype url_regex -i \.asf
acl filetype url_regex -i \.asx
acl filetype url_regex -i \.avi
acl filetype url_regex -i \.mp3
acl filetype url_regex -i \.smi
acl filetype url_regex -i \.rm
acl filetype url_regex -i \.ram
acl filetype url_regex -i \.rmvb
acl filetype url_regex -i \.swf
acl filetype url_regex -i \.mpg
acl filetype url_regex -i \.mpeg
acl filetype url_regex -i \.mov
acl filetype url_regex -i \.zip
acl filetype url_regex -i \.mid
如果仅仅只是禁止用户访问的话,就没意思了,要让盗链者帮我们宣传我们的网站,特别是发现盗链比较多的时候,这个时候,可以让任何盗链的网站帮我们免费宣传~~~那就是把盗链的url重定向到我们的网站宣传页~~
建立脚本:/usr/local/squid/libexec/squid_redir.pl
————————–
#!/usr/bin/perl -T -w
#
# rredir.pl
#
# Description: Direct all request to files who are in a local dir to
# this directory
#
use File::Basename;
use URI::URL;
# flush after every print
$| = 1;
# Process lines of the form ‘URL ip-address/fqdn ident method’
# See release n****s of Squid 1.1 for details
while ( <> ) {
$r302=0;
($url, $addr, $fqdn, $ident, $method) = m\S*) (\S*)/(\S*) (\S*) (\S*):;
$url = url $url;
$host = lc($url->host);
if ( $host !~ /\./ ) {
    next;
}
if ( $host =~ /vod\.domain\.com/ ) {
    $url->path(”/ad.wmv”);
    $r302=1;
}
} continue {
if ( $r302 ) {
    print “302url\n”;
} else {
    print “$url $addr/$fqdn $ident $method\n”;
}
}
————————–
然后在squid.conf添加:
redirect_program /usr/local/squid/libexec/squid_redir.pl
redirect_children 5
acl superurl url_regex -i ^http://vod\.domain\.com/tom\.wmv$
redirector_access deny superurl
redirector_access allow filetype !dl
redirector_access deny all
设置superurl是因为宣传我们自己站点的视频
是不做防盗链的,这样才能起到宣传的作用。现在大功告成啦!网站的流量大幅增加~~~PV是原来的三倍,Oh,Yeah~
WMS视频
的MMS协议由于不是明文,无法实现防盗链,但是RTSP协议基本就是HTTP协议的变种,可以在BIGIP等可以进行Layer 7处理数据的设备上实现对Cookie的校验。但是WMS视频
防盗链要禁止MMS协议,因为MMS协议不是明文,无法进行cookies的识别。但是可以在HTTP,RTSP上进行识别,WMS V9都是支持HTTP,RTSP的。下面是用于BIGIP的防盗链iRule:
————————–
if (http_uri matches_regex “vod.domain.com”) {
if (http_cookie(”Cache”) == “vod”) {
    use pool vod-rtsp
}
else {
    discard
}
}
else {
use pool vod-rtsp
}
————————–
其他的系统可以参考以上的规则。
采用Cookie的防盗链方式对于大多数的系统都可以轻易实现,Cookie一般都是用来传递认证信息,相信不会出现不传递的状况。

时间: 2024-10-17 18:32:51

防盗链技术终极解决方案(squid+cookie)的相关文章

http请求详解,防盗链技术_韩顺平PHP视频听课笔记

韩顺平PHP视频听课笔记 第84讲 http请求详解,防盗链技术 1,  通过httpwatch插件来抓取http请求内容 2,  http1.0短连接, http1.1长连接 http1.0短连接:每次通信时间很短,效率极低,已被废除. http1.1长连接:通话时间长.只要现在基本都采用http1.1. 只要Connection的状态为keep-alive,就说明是通话状态 3,  http是tcp/ip协议的一个应用层协议,http也是我们web开发的基础. 4,  一个问题:看一个tes

php防盗链技术

在Http协议中,头信息里,有一个重要的选项: Referer Referer: 代表网页的来源,即上一页的地址 如果是直接在浏览器上输入地址,回来进来,则没有Referer头. 这也是: 为什么服务器知道我们的图片是从哪儿引用的,也知道我们的客户从哪个网站链接点击过来的. 问题: 如何配置apache服务器,用于图片防盗链? 原理: 在web服务器层面,根据http协议的referer头信息,来判断. 如果来自站外,则统一重写到一个很小的防盗链提醒图片上去. 具体步骤: 1:打开apache 

php笔记05:http协议中防盗链技术

倘若我们自己在电脑上写了一个网站文件(可以是html,php文件等等),但是只希望本机可以访问这个文件,不希望别的电脑访问就需要这里的防盗链技术 1.我们在本地写了一个import.php文件: 而且这里import.php文件的内容是如下: <?php //没有防止 //获取REFERER if(isset($_SERVER['HTTP_REFERER'])){ //取出来 //判断 $_SERVER['HTTP_REFERER']是不是以http://localhost/http开始,这里涉

[php]referer应用--http防盗链技术

1.防盗链的理解 所谓防盗链是防止其他的网站引用自己网站的资源连接,比如图片.视频等等,但是并不会阻碍从自己网站上享受资源的用户,这就要求能够将其他网站的连接请求阻止 2.防盗链的原理 其实从自己网站使用资源的时候不是由浏览器直接请求资源的,肯定是通过在自己网站上点击,然后从这个页面跳转到资源,无论怎么样,用户是通过自己的网站页面作为中介来访问资源,就类似通过类中定义的方法来访问受保护的变量一样,因此在发向服务器的http请求中就有一个字段为referer用来表明来源于何处,假如是从自己网站发出

简单的防盗链技术(过滤器原理)

public class ImgFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器初始化..."); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws

php破解防盗链技术

发送http请求 构造referer信息 在Http协议中,头信息里,有一个重要的选项: Referer Referer: 代表网页的来源,即上一页的地址 具体方法http.class.php // http请求类的接口 interface Proto { // 连接url function conn($url); //发送get查询 function get(); // 发送post查询 function post(); // 关闭连接 function close(); } class Ht

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

资源被盗链:(简明定义) 下载者不是从你的网站直接下载资源,而是通过其他盗链网站提供的你的下载资源链接进行下载你的服务器资源! http://baike.baidu.com/view/272422.htm 一>预防方法: 方法1:判断引用地址这个方法是最早及最常见的方法.所谓判断引用地址,就是判断浏览器请求时HTTP头的Referer字段的 值,这个值在asp.net里面可以用 Request.UrlReferrer属性取得.几个例子来说,在正常情况下当用户在浏览 http://uushare.

httpd之防盗链和限制下载

配置httpd防盗链可以用SetEnvIfNoCase和rewrite实现反盗链(Anti-Leech) 一.使用SetEnvIfNoCase,注意放行自己的网址 SetEnvIfNoCase Referer "^http://.*\.sunnysky\.com" local_ref SetEnvIfNoCase Referer ".*\.byqk\.com" local_ref SetEnvIfNoCase Referer "^$" local

谈谈网站的防盗链(Filter过滤器)

导语:明明引用了一个正确的图片地址,但显示出来的却是一个红叉或写有“此图片仅限于***网站用户交流沟通使用”之类的“假图片”(下图便是网易博客的防盗链效果).用嗅探软件找到了多媒体资源的真实地址用下载软件仍然不能下载.下载一些资源时总是出错,如果确认地址没错的话,大多数情况都是遇上防盗链系统了.常见的防盗链系统,一般使用在图片.音视频.软件等相关的资源上. 一.什么是防盗链系统:         在确保地址正确的情况下,不能下载相应的资源,均是受到防盗链系统的影响,那么究竟什么是防盗链系统呢?防