11.25 配置防盗链

   防盗链,就是不让别人盗用你网站上的资源,这个资源,通常指的是图片、视频、歌曲、文档等,通过限制referer实现防盗链的功能

referer的概念

你通过A网站的一个页面http://a.com/a.html 里面的链接去访问B网站的一个页面http//b.com/b.html ,那么这个B网站页面的referer就是http://a.com/a.html。 也就是说,一个referer其实就是一个网址

 

1.配置防盗链,配置虚拟主机配置:

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

添加以下配置:

 <Directory /data/wwwroot/www.123.com>

        SetEnvIfNoCase Referer "http://www.123.com" local_ref

        SetEnvIfNoCase Referer "http://123.com" local_ref

        SetEnvIfNoCase Referer "^$" local_ref

        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">

            Order Allow,Deny

            Allow from env=local_ref

        </filesmatch>

    </Directory>

最终保存配置:

blob.png 

解释说明:

首先定义允许访问链接的referer,其中^$为空referer当直接在浏览器里输入图片地址去访问它时,它的referer就为空。然后又使用filesmatch来定义需要保护的文件类型,访问txtdocmp3ziprarjpggifpng格式的文件,当访问这样的类型文件时就会被限制。

2.重新检测和加载:

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

3.我们来做一下测试如下:

先在http://ask.apelearn.com上发个帖子,将http://111.com/qq.png链接放进去作成超链接,然后直接点这个链接其实也是访问不了的,所以我们要到 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf  配置文件中,将http://ask.apelearn.com这个地址添加进白名单,就可以访问了,这就是防盗链的作用。

3.1因为我的阿里云用域名访问提示我备案,我就使用IP访问,IP访问会访问默认虚拟主机上的内容,所以我在默认虚拟主机上也加了防盗链,测试成功,

blob.png 

3.2然后在虚拟主机配置文件里把第三方站()点加入到白名单

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

添加以下配置:

SetEnvIfNoCase Referer "http://ask.apelearn.com/" local_ref

然后再检查语法和加载配置

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

blob.png 

测试成功

blob.png 

3.3 使用curl测试

curl -e "http://ask.apelearn.com" -x127.0.0.1:80 abc.com/linux.jpg     自定义referer

blob.png 

使用-e来定义referer,这个referer一定要以http://开头,否则不管用

11.26 访问控制Directory

  对于一些比较重要的网站内容,除了可以使用用户认证限制访问之外,还可以通过其他一些方法做到限制,比如可以限制IP,也可以限制user_agent,限制IP指的是限制访问网站的来源IP,而限制user_agent,通常用来限制恶意或者不正常的请求。

1.修改虚拟机配置文件内容:(针对IP来做限制,只允许来源IP为127.0.0.1的访问

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

核心配置文件内容如下:

 <Directory /data/wwwroot/abc.com/admin/>

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </Directory>

最终保存配置:

blob.png 

说明:使<Directory>来指定要限制访问的目录order定义控制顺序,哪个在前面就先匹配哪个规则,在本例中deny在前面,所以要先匹配Deny from all,这样所有的来源IP都会被限制,然后匹配Allow from 127.0.0.1,这样又允许了127.0.0.1这个IP。最终的效果是,只允许来源IP为127.0.0.1的访问

2.创建admin目录,模拟网站后台,在后台目录下面创建文件index.php

mkdir /data/wwwroot/abc.com/admin/

cd  /data/wwwroot/abc.com/admin

vim index.php  //录入一些内容保存

/usr/local/apache2.4/bin/apachectl graceful  //上面添加了配置,载入配置

3.curl 测试效果

 curl -x127.0.0.1:80 abc.com/admin/index.php -I     //200状态码 127.0.0.1是在配置文件里设置允许访问的

blob.png 

curl -x47.97.163.117:80 abc.com/admin/index.php    //403状态码因为没有被允许,所以显示forbidden

blob.png 

3.1 查看访问日志:

tail /usr/local/apache2.4/logs/abc.com-access_20180531.log

blob.png 

说明:

本机有两个IP,一个是阿里云外网IP47.97.163.117,一个是本机127.0.0.1,通过这两个IP都可以访问到站点.而来源分别为47.97.163.117127.0.0.1,其实和本机IP是一样的,curl测试状态码为403则被限制访问了。

11.27 访问控制FilesMatch

FilesMatch针对某个文件来做限制:

 

1.添加虚拟主机配置

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

添加核心配置文件内容:

<Directory /data/wwwroot/abc.com>

    <FilesMatch  "admin.php(.*)">

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </FilesMatch>

</Directory>

最终保存配置:

blob.png 

2.再检查语法和加载配置

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

3. 用curl测试

curl -x127.0.0.1:80 abc.com/admin.php -I   //状态码200

curl -x47.97.163.117:80 abc.com/admin.php -I      //状态码403,配置生效

blob.png