何为防盗链以及如何设置防盗链(宝塔设置防盗链)

我们在访问一些网站的时候,特别是一些博客网站,往往会看到一些图片加载不出来(一般就是一张裂开的图标样式),除服务器问题导致图片丢失外,还有一个原因防盗链起了作用,这就是所谓的盗链。要想了解防盗链,我们先来了解一下什么叫做盗链。

什么是盗链

盗链就是直接获取别人网页的资源链接在自己的网页上展示,从而到达绕过别人的展示页面,在自己的页面上向用户提供此内容的展示。通常情况下被盗链的一般都是图片、音乐、视频、软件等资源。通过这种盗链手段可以大大减轻自己的服务器压力。

比如在本地建立一个html文件(盗链.html),直接使用本站的图片链接

<html>
    <img src="https://www.xuwenyan.com/wp-content/uploads/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)$ https://www.xuwenyan.com/404 [R,NC,L]

宝塔防盗链设置

上述只是传统的防盗链设置,由于部分代理服务器并不会设置Refer,Refer是可以手动修改的,换言之Refer可以伪造的,所以传统的防盗链设置并不是完全安全的,当然应付一般的盗链是住够的。