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