设置防盗链,访问控制

24人阅读 评论(0) 收藏 举报
分类:

设置防盗链

防盗链的作用是,我们网站的图片,只能通过我们自己的网站去访问,其他网站借用不行。 
比如:我们的网站,被用户上传了很多图片,而用户又在他自己的网站上加上了我们网站图片的链接,就直接能访问了。 
这样可以节省他网站的带宽

一、图片防盗链原理 
http标准协议中有专门的字段记录referer 
一来可以追溯上一个入站地址是什么 
二来对于资源文件,可以跟踪到包含显示他的网页地址是什么 
因此所有防盗链方法都是基于这个Referer字段

如果是直接在浏览器上输入地址,回来进来,则没有referer头。

这也是:为什么服务器知道我们的图片是从哪儿引用的,也知道我们的客户从哪个网站链接点击过来的

referer防盗链的配置文件:

  <Directory /data/wwwroot/www.123.com>//用来定义那个目录,就是站点所在目录
        SetEnvIfNoCase Referer "http://www.123.com" local_ref //定义referer的白名单
        SetEnvIfNoCase Referer "http://123.com" local_ref //定义referer的白名单
        SetEnvIfNoCase Referer "^$" local_ref //定义referer的白名单(空的referer,直接输入网址进去的,没经过其他网站跳转)
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> //定义规则,针对那些访问做防盗链
            Order Allow,Deny //定义访问控制的
            Allow from env=local_ref //允许白名单的referer
        </filesmatch>
    </Directory>

在Apache设置防盗链:

打开虚拟配置文件:

[root@shuai-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.111.com www.example.com

    <Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "http://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>

        SetEnvIf Request_URI ".*\.gif$" img
        SetEnvIf Request_URI ".*\.jpg$" img
        SetEnvIf Request_URI ".*\.png$" img
        SetEnvIf Request_URI ".*\.bmp$" img
        SetEnvIf Request_URI ".*\.swf$" img
        SetEnvIf Request_URI ".*\.js$" img
        SetEnvIf Request_URI ".*\.css$" img
    ErrorLog "logs/111.com-error_log"
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>

保存退出,检查配置文件语法并重新加载配置文件

[root@shuai-01 ~]# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@shuai-01 ~]# /usr/local/apache2.4/bin/apachectl graceful

这是只有通过referer白名单的才能访问:

用curl测试: 
curl -e 可以指定referer:在白名单里

[root@shuai-01 ~]# curl -e "http://111.com/123.txt" -x127.0.0.1:80 111.com/logo.png -I
HTTP/1.1 200 OK
Date: Mon, 25 Dec 2017 09:33:36 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Last-Modified: Thu, 21 Dec 2017 14:12:26 GMT
ETag: "1914-560da4a1b6680"
Accept-Ranges: bytes
Content-Length: 6420
Content-Type: image/png

不在白名单里的

[root@shuai-01 ~]# curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 111.com/logo.png -I
HTTP/1.1 403 Forbidden
Date: Mon, 25 Dec 2017 09:36:02 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

用浏览器测试:

在白名单里的(这里是空的referer)

这里写图片描述

不在白名单里:

这里写图片描述

问题1:

查看日志的时候,明明访问了多次站点,却没有日志。

原因:这里由于访问的是图片,由于以前做过日志不记录静态文件,配置文件没有更改或删除,访问.png时,就没记录。

更改配置文件,将其注释掉。

访问控制

访问控制和用户认证其实是不一样的,用户认证是通过用户名密码的方式允许访问,访问认证是通过允许IP白名单允许访问。

访问控制的配置文件:

  <Directory /data/wwwroot/www.123.com/admin/> //针对admin目录
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
  </Directory>

order用来定义顺序,是先deny(不允许),allow(允许)。

        Order deny,allow
        Deny from all
        Allow from 127.0.0.1

这里先所有都不允许,在只允许127.0.0.1 。执行完后才生效。 
如果:

        Order allow,deny
        Deny from all
        Allow from 127.0.0.1

先allow在deny。就所有都不允许了。

设置admin文件的访问控制:

打开虚拟配置文件

[root@shuai-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 


//设置访问控制

  <Directory /data/wwwroot/111.com/admin/>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
  </Directory>

//设置防盗链

    <Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "http://111.com" local_ref
        SetEnvIfNoCase Referer "http://weibo.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>

保存退出,检查配置文件语法并重新加载配置文件

[root@shuai-01 ~]# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@shuai-01 ~]# /usr/local/apache2.4/bin/apachectl graceful

创建admin文件:

[root@shuai-01 ~]# cd /data/wwwroot/111.com/
[root@shuai-01 111.com]# mkdir admin/
[root@shuai-01 111.com]# touch admin/index.php
[root@shuai-01 111.com]# echo '121212' > admin/index.php 
[root@shuai-01 111.com]# cat admin/index.php 
121212

通过curl进行测试:

自测试:

[root@shuai-01 111.com]# curl -x127.0.0.1:80 111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Mon, 25 Dec 2017 10:27:40 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

[root@shuai-01 111.com]# curl -x192.168.176.135:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Mon, 25 Dec 2017 10:28:56 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

前面访问控制是目录,它还能是一个文件。

<Directory /data/wwwroot/www.123.com> //在那个目录下
    <FilesMatch  "admin.php(.*)">
    //对于那些文件
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>
查看评论

网络工程师ACL协议强化训练教程

-
  • 1970年01月01日 08:00

[Nginx]用Nginx实现与应用结合的访问控制 - 防盗链

应用场景:图片等资源需要设置权限,如:只有认证过的用户才能访问自己的图片。 解决办法:使用Nginx的防盗链模块http_secure_link可以实现,该模块默认情况下不包含,故在安装时要加上--...
  • u010415792
  • u010415792
  • 2014-05-07 11:28:50
  • 2554

详细的七牛云防盗链配置

** 需求:上传到七牛云的图片,防止被盗链和被刷流量。 解决方法:在融合CDN里面,对域名进行防盗链配置。 举个常用的场景:现在有个关于分享的网页,url是:http://www.aaa.com/...
  • change_on
  • change_on
  • 2017-06-17 12:51:23
  • 3083

nginx系统真正有效的图片防盗链完整设置详解

关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底的防盗链! 一般,我们做好防盗链之后其他网站盗链的本站图片就会全部失效无法显示,但是您如果通...
  • longjef
  • longjef
  • 2016-11-22 11:45:16
  • 4299

IIS服务器防盗链具体设置方法

IIS主机的Rewrite伪静态组件下载与配置之前已经讲过,如果你的apache服务器,请看Apache服务器设置防盗链的方法>,今天主要说下IIS服务器防盗链的设置方法。 isapi_rewr...
  • guowenshen
  • guowenshen
  • 2014-10-27 21:22:57
  • 2350

网站防盗链(IIS7.0与IIS7.5配置防盗链)

  • 2015年02月06日 17:53
  • 9.65MB
  • 下载

关于防盗链与跨域访问

最近用阿里云的时候发现一些防盗链与跨域访问的一些坑,填完坑之后稍微整理一下。...
  • druid0523
  • druid0523
  • 2016-12-30 09:53:05
  • 241

iis图片防盗链 seo优化

iis图片防盗链 seo优化 urlrewrite重写模块 图片防盗用
  • LINZHENYU1996
  • LINZHENYU1996
  • 2017-03-25 21:36:58
  • 266

网站图片视频等防盗链

DocumentRoot /export/web/test         ServerName icon.test.net ##服务器网站防盗链开始 RewriteEngine On Rewrite...
  • lihuang319
  • lihuang319
  • 2017-04-06 18:12:21
  • 603

PHP实现防盗链

$ADMIN[defaulturl] = "http://www.qq.com/404.htm";//盗链返回的地址 $okaysites = array("http://127.0.0.1/","...
  • Zhao1234567890123456
  • Zhao1234567890123456
  • 2015-03-13 10:59:09
  • 669
    个人资料
    持之以恒
    等级:
    访问量: 2523
    积分: 985
    排名: 5万+
    文章存档
    最新评论