配置防盗链

首先来了解一下什么是盗链,全称是盗取链接,假如我们的网站有很多好看的图片,别人可以查看我们网站图片的链接,然后应用在他的网站上,这样的话,去访问他的网站,实际上消耗的是我们的流量(因为实际链接在我们这里),这样我们就不得不去配置防盗链,使得别人不能复制我们图片的链接。

防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。 如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区别对待。如果网站服务器用的是apache,那么使用apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查refer,如果refer的信息来自其他网站则重定向到指定图片或网页上。

编辑虚拟主机配置文件 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

在配置文件中添加如下内容

<Directory /data/wwwroot/mm.com>
        SetEnvIfNoCase Referer "http://kjj.com"; local_ref
        SetEnvIfNoCase Referer "http://hnlbdz.com"; local_ref
        SetEnvIfNoCase Referer "^$" local_ref                            #表示空的Refer
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
            Order Allow,Deny
            Allow from env=local_ref
        </filesmatch>
 </Directory>

Directory表示指定哪个目录,我们设置防盗链肯定是针对本站点,所以直接写站点。 SetEnv开头的是referer的白名单 filesmatch开头的指的后面这些格式的文件不设置白名单,(就是说针对这些文件做防盗链) order定义访问控制的,order定义顺序,是先允许还是先拒绝。 allow一行的意思是把上面末尾带有local_ref的白名单referer做一个允许。其他的使用上一行的order给deny掉

然后我们保存检查错误,然后重启。 /usr/local/apache2.4/bin/apachectl -t /usr/local/apache2.4/bin/apachectl graceful

我们来做一个测试,测试一下kjj.com/ai.png浏览器看看能不能打开,或者把它以超链接的形式发到论坛,然后点开

出现如下情况就是空referer,就是防盗链起了作用:


访问控制Directory

访问控制Directory作用:限制白名单ip,只有允许的ip才能访问。相当于再再加一层防护。因为公网ip是固定的,所以帮你可以把公司的ip放进去,这样就只有公司的网络才能访问到。否则全部拒绝或限制。

编辑虚拟主机配置文件 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

在配置文件里添加如下段,目的是对yy.com下的yang目录进行访问控制(我们把如上选中代码复制到配置文件里去,然后做一些改动,(因为我们刚刚设置防盗链的时候用到了Directory,所以我们要把它放在那个Directory的上面))

<Directory /data/wwwroot/yy.com/yang/>
        Order deny,allow
        Deny from all
        Allow from 192.168.71.131
     </Directory>

Order 用来定义顺序 Order deny,allow 表示先deny 再allow 这段话表是拒绝所有的访问,仅通过192.168.71.131

然后我们保存检查错误,然后重启。 /usr/local/apache2.4/bin/apachectl -t /usr/local/apache2.4/bin/apachectl graceful

使用curl进行测试是否成功 curl -x192.168.71.131:80 mm.com/yang/index.php -I

使用192.168.71.131可以正常访问,

curl -x192.168.71.132:80 111.com/yang/index.php -I

使用192.168.71.13无法访问


访问控制FilesMatch

上面访问控制的是以目录的形式,当然也是可以匹配一个文件名,或者说链接,有时候我们访问的链接里可能不是yang/,而是yang.php后面可能还跟了其他参数,那么我们就可以用forbidden去匹配它。

对mm.com下的yang.php开头页面进行访问控制,同样在虚拟主机配置文件上添加如下段:

<Directory /data/wwwroot/mm.com>
         <FilesMatch  "yang.php(.*)">
           Order deny,allow
           Deny from all
           Allow from 192.168.71.131
         </FilesMatch>
</Directory>

然后我们保存检查错误,然后重启。(因为有特殊符号所以要加单引号) /usr/local/apache2.4/bin/apachectl -t /usr/local/apache2.4/bin/apachectl graceful

使用curl进行测试是否成功 curl -x192.168.71.132:80 mm.com/yang.php?=1=2 -I

显示403 Forbidden

然后我们试试131的ip 虽然是这里是404,因为这个网址是不存在的,如果存在就能访问了。 curl -x192.168.71.131:80 'http:// mm.com/yang.php?alsjdflksajdflk' -I