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

防盗链技术现状:1、通过识别Referer确认请求来源页面2、Apache,squid等都能对Referer进行识别3、通过ActiveX显示的内容不向服务器提供Referer Header(例如,Flash,WindowsMedia视频等)4、流媒体的RTSP协议也不向服务器提供Referer Header5、通过服务器端程序代码实现防盗链应用现状: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.placl dl external download然后选择需要进行防盗链的文件类型:acl filetype url_regex -i /.wmvacl filetype url_regex -i /.wmaacl filetype url_regex -i /.asfacl filetype url_regex -i /.asxacl filetype url_regex -i /.aviacl filetype url_regex -i /.mp3acl filetype url_regex -i /.smiacl filetype url_regex -i /.rmacl filetype url_regex -i /.ramacl filetype url_regex -i /.rmvbacl filetype url_regex -i /.swfacl filetype url_regex -i /.mpgacl filetype url_regex -i /.mpegacl filetype url_regex -i /.movacl filetype url_regex -i /.zipacl 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 detailswhile ( <> ) {$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.plredirect_children 5acl superurl url_regex -i ^http://vod/.domain/.com/tom/.wmv$redirector_access deny superurlredirector_access allow filetype !dlredirector_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一般都是用来传递认证信息,相信不会出现不传递的状况。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值