(七)配置防盜鏈、訪問控制Directory與 訪問控制FilesMatch

配置防盜鏈

介紹:防盜鏈的做用是,咱們網站的圖片,只能經過咱們本身的網站去訪問,其餘網站借用不行。我舉的例子,意思是咱們的網站,被用戶上傳了不少圖片,而用戶又在他本身的網站上加上了咱們網站圖片的連接,就直接能訪問了。 這樣能夠節省他網站的帶寬。 什麼是referer
referer是http數據包的header的一部分,當瀏覽器其向服務器發送請求時,將帶上referer,以此來告訴瀏覽器該請求時從什麼網頁連接過來的,瀏覽器處理該連接並顯示。php

設置了防盜鏈後,一些站點將沒法經過引用的方式來獲取服務器的資源,只能經過直接訪問本機來獲取,這樣就將有效的流量訪問限定到了本機,不被不法站點所利用。html

怎麼配置
首先編輯虛擬主機配置文件apache

#進入虛擬主機文件配置
[root@centos001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#添加以下
<Directory /data/wwroot/111.com> 
        SetEnvIfNoCase Referer "http://111.com" local_ref//設爲白名單
        SetEnvIfNoCase Referer "http://aaa.com" local_ref//設爲白名單
      #  SetEnvIfNoCase Referer "^$" local_ref//將空referer設爲白名單,先註釋掉
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">//對txt、doc等格式的文件執行訪問控制
            Order Allow,Deny//執行順序依次爲allow、deny,反過來將致使都被禁止訪問
            Allow from env=local_ref
        </filesmatch>
    </Directory>

檢查讀寫並重啓服務vim

[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl graceful

訪問空referer(直接訪問) 註釋掉空referer行
輸入圖片說明centos

  • 不註釋referer訪問

輸入圖片說明

  • 第三方站點訪問(引用),這裏咱們在論壇上發了一個連接帖子,經過這個連接訪問咱們虛擬主機上的圖片
#配置文件中加入了第三方網站的地址
SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref

輸入圖片說明

獲得結果瀏覽器

輸入圖片說明

  • 使用curl命令模擬referer:-e參數
[root@centos001 ~]# curl -e "http://111.com/qq.png" -x 192.168.10.120:80 111.com/qq.png -I
HTTP/1.1 200 OK
Date: Wed, 03 Jan 2018 16:44:36 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Last-Modified: Wed, 27 Dec 2017 16:41:20 GMT
ETag: "e01-5615511a9ac00"
Accept-Ranges: bytes
Content-Length: 3585
Content-Type: image/png
#這裏qq出現了403,是由於使用非容許的referer會返回403狀態碼
[root@centos001 ~]# curl -e "http://www.qq.com/qq.png" -x 192.168.10.120:80 111.com/qq.png -I
HTTP/1.1 403 Forbidden
Date: Wed, 03 Jan 2018 16:47:01 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

訪問控制Directory

限制用戶訪問部分目錄,容許特定ip訪問 修改配置文件 ,檢查讀寫後重啓服務服務器

<Directory /data/wwroot/111.com/admin/>
#決定規則的前後順序
        Order deny,allow
        Deny from all
#只容許特定的ip訪問
        Allow from 192.168.10.120
    </Directory>

測試1用指定ip訪問curl

[root@centos001 admin]# curl -x 192.168.10.120:80 http://111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Wed, 03 Jan 2018 17:19:26 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8

換一個ip訪問測試

[root@centos001 admin]# curl -x 127.0.0.1:80 http://111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Wed, 03 Jan 2018 17:20:56 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

訪問控制FilesMatch

除了可以限制訪問目錄,還能夠限制某些文件的訪問網站

  • 修改配置文件
<Directory /data/wwwroot/www.123.com>
    <FilesMatch  "admin.php(.*)">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>

-經過其它ip訪問

[root@centos001 admin]# curl -x 127.0.0.1:80 http://111.com/admin/admin.php?123-I
HTTP/1.1 403 Forbidden
Date: Wed, 03 Jan 2018 17:36:42 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
  • 指定ip訪問,404表明能夠訪問,可是文件不存在
[root@centos001 admin]# curl -x 192.168.10.120:80 http://111.com/admin/admin.php?abc -I
HTTP/1.1 404 Not Found
Date: Wed, 03 Jan 2018 17:37:20 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

擴展

幾種限制ip的方法
http://ask.apelearn.com/question/6519
apache 自定義header
http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout
http://ask.apelearn.com/question/556

相關文章
相關標籤/搜索