11.25 配置防盗链
盗链的定义
- 此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。
- 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
为什么会产生盗链
一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
配置防盗链
Directory针对目录进行
<Directory /data/wwwroot/www.123.com> //用于定义作用于那个目录
SetEnvIfNoCase Referer "http://www.111.com" local_ref //定义白名单
SetEnvIfNoCase Referer "http://111.com" local_ref //定义白名单
SetEnvIfNoCase Referer "^$" local_ref //定义空的页面的白名单
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)"> //定义规则
Order Allow,Deny //定义访问控制的顺序
Allow from env=local_ref
</filesmatch>
</Directory>
filesmatch 不严格区分大小写,标准写法为“FilesMatch”
语法理解:
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)"> //定义规则为 "\.(txt|doc|mp3|zip|rar|jpg|gif|png)"
Order Allow,Deny //控制顺序,先Allow,后Deny
Allow from env=local_ref //来自 local_ref 不受限制
</filesmatch>
用curl 来模拟查看 referer情况
模拟referer的 需用用到-e选项,模拟的地址需要用“”双引号括起来\
curl -e “http://111.com/123.txt” -x127.0.0.1:80 111.com/123.png -I
通过http://qq.com/123.php地址跳转到111.com/123.png,错误码是403表示无法访问
[root@localhost ~]# curl -e "http://qq.com/123.php" -x127.0.0.1:80 111.com/123.png -I
HTTP/1.1 403 Forbidden
Date: Wed, 02 Aug 2017 17:55:26 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
通过http://111.com/123.php地址跳转到111.com/123.png地址,却是正常的,代码是200
[root@localhost ~]# curl -e “http://111.com/123.php” -x127.0.0.1:80 111.com/123.png -I
HTTP/1.1 200 OK
Date: Wed, 02 Aug 2017 17:56:40 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Last-Modified: Sun, 18 Jun 2017 16:38:49 GMT
ETag: "4dead-5523ea7219840"
Accept-Ranges: bytes
Content-Length: 319149
Content-Type: image/png
通过以上测试结果,可以知道。做了放到配置以后,只能通过"http://www.111.com"、"http://111.com"跳转到的之后图片,才能进行正常访问,其他地址跳转过去的是没有办法直接访问的
11.26 访问控制Directory
使访问安全,更加安全;使用用户认证,也有可能因为用户账号密码丢失导致被其他人访问,所有就有了限制白名单IP访问,只有白名单的IP才能访问
修改配置文件,加入新的配置
<Directory /data/wwwroot/111.com/admin>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
Order 用来指定先后顺序,先deny还是先allwo,如果是deny,allow 表示先执行deny 语句,后执行Allow语句;反之顺序反置\
Order deny,allow //执行顺序
Deny from all //Deny 规则
Allow from 127.0.0.1 //Allow 规则
可以理解为,先拒绝所有,然后又允许了 127.0.0.1的访问,这个顺序,是全部执行,会把所有的语句都运行一遍
整个命令可以理解为,只允许127.0.0.1的IP去进行访问/data/wwwroot/111.com/admin 这个目录 换个一个IP都无法进行
[root@localhost ~]# curl -x192.168.133.130:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Wed, 02 Aug 2017 17:29:54 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
[root@localhost ~]# curl -x127.0.0.1:80 111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Wed, 02 Aug 2017 17:30:07 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
哪怕是不存在的页面也是没有办法进行访问,会直接报错403 无法访问
通过白名单IP访问提示是404,没有这个页面
[root@localhost ~]# curl -x127.0.0.1:80 111.com/admin/asdasd -I
HTTP/1.1 404 Not Found
Date: Wed, 02 Aug 2017 17:32:10 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
但是通过其他的IP去访问,就直接提示403,无法访问
[root@localhost ~]# curl -x192.168.133.130:80 111.com/admin/asdasd -I
HTTP/1.1 403 Forbidden
Date: Wed, 02 Aug 2017 17:32:23 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
11.27 访问控制FilesMatch
访问控制可以通过匹配目录,自然也可以匹配文件的形式 可以使用FilesMatch进行配置
<Directory /data/wwwroot/www.123.com> //功能作用目录
<FilesMatch "admin.php(.*)"> //针对admin.php(.*)这个类型的文件,进行控制
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
curl 在测试URL连通性的时候 如果遇到有特殊符号需要用 '' 单引号括起来
curl -x127.0.0.1:80 'http://111.com/admin.php?ervwesdfsdf' -I
当使用FilesMatch 控制一些页面的时候,这个时候再去控制目录的话,就会是FilesMatch 的作用有些多余,所以FilesMatch 对文件使用还是很好的,FilesMatch,可以满足一些比较个性化的需求