何为防盗链以及如何设置防盗链(宝塔设置防盗链)
我们在访问一些网站的时候,特别是一些博客网站,往往会看到一些图片加载不出来(一般就是一张裂开的图标样式),除服务器问题导致图片丢失外,还有一个原因防盗链起了作用,这就是所谓的盗链。要想了解防盗链,我们先来了解一下什么叫做盗链。
什么是盗链
盗链就是直接获取别人网页的资源链接在自己的网页上展示,从而到达绕过别人的展示页面,在自己的页面上向用户提供此内容的展示。通常情况下被盗链的一般都是图片、音乐、视频、软件等资源。通过这种盗链手段可以大大减轻自己的服务器压力。
比如在本地建立一个html文件(盗链.html),直接使用本站的图片链接
<html> <img src="/zb_users/upload/2021/04/image-1.png"/> </html>
我们预想是可以正常展示本站的这张图片,然而因为本站做了一些简单的防盗链处理,所以图片在外站无法正常展示。
原图:
实际展示:
什么是防盗链
理解了盗链,防盗链就很好理解了,防盗链就是防止盗链。
防盗链的基本原理
通过Refer或者签名,网站可以检测目标网页访问的来源网页。如果是资源文件,则可以追踪到显示他的网页地址,一旦检测到来源不是本站,即进行阻止或者返回指定的页面。
传统的防盗链配置
nginx配置(文件):
location ~.*.(gif|jpg|png|flv|swf|rar|zip)$ { valid_referers none blocked test.com *.test.com; //加none的目的是确保浏览器可以直接访问资源 if($invalid_referer) { #return 403; // 直接返回403 rewrite ^/ http://www.test.com/403.jpg;//返回指定提示图片 } }
nginx配置(目录):
location /images/ { valid_referers none blocked test.com *.test.com; if($invalid_referer) { #return 403; rewrite ^/ http://www.test.com/403.jpg; } }
apache配置:
#防盗链配置 RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !xuwenyan.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !xuwenyan.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !www.xuwenyan.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !www.xuwenyan.com/.*$ [NC] RewriteRule .*.(gif|png|jpg|swf)$ http://www.xuwenyan.com/404 [R,NC,L]
宝塔防盗链设置
上述只是传统的防盗链设置,由于部分代理服务器并不会设置Refer,Refer是可以手动修改的,换言之Refer可以伪造的,所以传统的防盗链设置并不是完全安全的,当然应付一般的盗链是住够的。