我们将使用nginx的valid_referers 指令来做防盗链,下面来简单介绍下valid_referers指令。
语法:
valid_referers [none|blocked|server_names] ...
默认值:none
使用环境:server,location
该指令会根据Referer Header头的内容分配一个值为0或1给变量 $invalid_referer 。如果Referer Header头不符合valid_referers指令设置的有效Referer,变量$invalid_referer将被设置为1.
该指令的参数可以为下面的内容:
none:表示无Referer值的情况。
blocked:表示Referer值被防火墙进行伪装。
server_names:表示一个或多个主机名称。从Nginx 0.5.33版本开始,server_names中可以使用通配符"*"号。
简单介绍完后小伙伴们可能会想为啥要用这个参数做防盗链呢?
我们知道HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。下面我们在浏览器里面打开几个页面来体验下这个参数
下面我们准备一张图片test.jpg,和两台服务器,注意笔者的nginx版本是1.17的,不同的版本可能配置稍微有点不同。
服务器A:47.93.121.3
服务器B:175.24.110.203
笔者将图片test.php 放到服务器A上,并能够正常访问
接着我们在服务器B上写一个test.htm来引用这张图片:
访问看下:
能够正常访问。
但是我们希望服务器B在没有经过允许的情况下不能访问这张图片,那我们就需要配置下服务器A的nginx
那我们再在服务器B上看还能不能访问到这张图片:
发现已经不能访问这张图片,那我们再看看服务器A能不能访问:
常见的方法有以下几种:1、防下载处理。
2、动态加密影片地址(在规定的时间内自动变换影片路径)
3、与会员梆定,每个会员均有自己的连接路径,如:rtsp://username:userpass@ip/filmname.rm
4、进入播放页面,向数据库写入临时访问用名名与验证密码,超过连接时间,地址失效。
使用第一种方案,比较典型的就是使用凤凰软件工作室的Helix Server流媒体服务器功能组件包,影片的实际防问地址即无法播放也无法下载,发布时影片的真实地址链接,被封装成了smi文件,用记事本打开此文件,即可找出该片真实路径,如:rtsp://username:userpass@ip/name.smi,防下载较果的确很好,但不足之处就是此影片仍然可以盗取,只不过是盗链者无法获取下载罢了,象国内的集酷影视采用的即是此种方法,地址依然严重被盗。
动态加密影片地址,这种方法的确是非常不错的方法,问题在于一些细节上的处理,如皇家影院,采用的就是动态加密影片地址,进入点播页面后,15秒内地址有效,15秒后地址失效,但有一个致命弱点就是没有做防下载处理,其地址为pnm://ip/name.rm 将其改为http://ip/name.rm居然发现可以开无数个线程下载,不足显易见了。
会员梆定,国内的华亚网、中影网(因传播色情,该站现已被关闭)采用的就是这样的方法,经研究发现,仍有不足之处,只要使用rtsp://username:userpass@ip/name.rm这样的路径即可以使用影音传送带无数线程非法下载,在线播放地址仍可被盗,只不过是不能使用一个账号,观看同一部影片罢了,Helix Server的防盗处理环节仍存在问题。其次就是数据库的维护,Helix的高级认证显然是读取的会员数据库,挂接过长,读取频繁会导致不容易连接媒体文件或连接时间过长,导致播放影片时需重复刷新播放页面才能开始播放的缺点,而且数据库一旦崩溃,修复的难度与带来问题的严重性很明显了。
最后一种方法,是用户进入播放页面后,向认证区写入一个临时的账号与密码,得到授权,规定时间内清空认证区临时账号密码,地址失效。国内的21CN等大型VOD网站采用的即是这种方法,这种方法也是值得推荐的,前提是必需使用SQL数据库,添加定时删除认证区账号密码的作业,或者使用第三方程序自动清除认证区账号密码。
有没有一种即不占用系统资源,而且比较稳定的防盗解决方案?即是动态加密+防下载处理。
亚视网影视程序即是采用,其稳定性与超强防盗链的功能已经非常成熟,经过长时间的运营实践表明本系统是一套性能卓越的VOD视频点播解决方案
盗链的解决方案其实通过WEB服务器的URL过滤技术,这个伤脑筋的问题会很容易得到解决。如果WEB服务器用的是APACHE的话,那么使用APACHE自带的UrlRewrite功能可以很轻松地防止各种盗链,其原理是检查REFER,如果REFER的信息来自其他网站则禁止访问所需要的资源。那么,IIS支持UrlRewrite吗?答案很简单,不支持。但是我们可以通过安装第三方服务器扩展让IIS支持。目前有一种产品能比较好地支持IIS的UrlRewrite,名字叫ISAPI_Rewrite。下载地址在:对应的格式化表达式应该为/test.asp\?id=$1。进行正则表达式的编写的时候,可以利用isapi_rewrite提供的正则表达式测试工具(默认安装提供),进行调试。做好了匹配表达式和格式化表达式,我们可以把它们放到安装目录下的httpd.ini里面。文件保存后,不需重新启动iis即可生效。对于我的网站,我防盗链的方法是在httpd.ini里面加入如下语句RewriteCondHost:(.+)RewriteCondReferer:(?!block.gif[I,O]然后重启IIS,这时防盗链就开始起作用了,其他网站盗链过来的请求都会被拒绝。至此,我也终于可以摆脱了被盗链的烦恼了。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)