web防盗链原理及实战

    盗链,简单的说就是某些网站通过自身网站程序未经许可调用其他网站的资源,在自己网站上显示这些资源。浪费了调用资源网站的网络流量,造成其他网站的带宽及服务压力吃紧,甚至宕机

  网站盗链会大量消耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益。早期的盗链一般是一些比较小的网站盗取一些有实力的大网站的地址,盗链的目标比较有针对性,现如今,一些大型的网站也已经开始把盗链的目光锁定在了整个互联网上,窃取整个互联网上的其它机器的带宽。常见的盗链有以下几种:图片盗链、音频盗链、视频盗链、文件盗链。

  

常见的防盗链解决方案
1.根据http referer实现防盗链
   在HTTP协议中,有一个表头字段叫referer,使用URL格式来表示从哪里来的链接到当前网页的资源。也就是说通过
referer可以检测到来源网页的类型,
referer会记录这一信息,也就是说,服务器可以根据referer来知道用户和资源是从哪个网站请求进来的,

apache,nginx,lighttpd三者都支持根据http referer实现防盗链

2.根据cookie处理
3.通过加密变换访问路径实现防盗链
lighttpd类似插件mod_secdownload

4.在图片或视频上添加水印


Apache通过referer实现防盗链

Apache通过rewrite模块实现防盗链,第一步启用mod_rewrite模块

LoadModule rewrite_module modules/mod_rewrite.so

第二步:在虚拟主机中添加以下内容

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^http://blog.king.org/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://blog.king.org$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.king.org/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.king.org$ [NC]
    RewriteRule (.*)\.(png|jpg|swf|gif|)$ http://bbs.king.org/img/nolink.png [R,NC]

RewriteCond可以看作是if语句,如果来源网站不是http://blog.king.org/.* 或者www.king.org/.*,则执行RewriteRule里面的规则,即跳转到http://bbs.king.org/img/nolink.png这个页面

**注意:http://bbs.king.org/img/nolink.png这个页面不要和防盗链网站是一个网站,如果是一个网站内的图片资源,我测试nolink.png是无法加载的,欢迎广大网友批评指正。


nginx实现防盗链

location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked  *.baidu.com *.king.org;
if ($invalid_referer) {
  rewrite ^/ http://bbs.king.org/img/nolink.png;
    }

  }

如果请求的是jpg,gif,png等结尾的资源,那么king.org 和baidu.com域名的网站均可以访问,其他的来源网站则重写到

http://bbs.king.org/img/nolink.png,

**注意:http://bbs.king.org/img/nolink.png这个页面不要和防盗链网站是一个网站,如果是一个网站内的图片资源,我测试nolink.png是无法加载的,欢迎广大网友批评指正。


利用referer和rewrite实现apache防盗链小节
通过判断referer的值来判断图片或资源引用是否合法,只有在根据配置配合设定需求范围内的referer这样的网站内容,才能
调用访问指定的资源内容,从而实现了资源被网站盗链的目的。需要注意的是,不是所有的浏览器都会设置referer变量,
而且有的还可以手动修改referer,伪造referer.





你可能感兴趣的:(web安全)