11.28 限定某個目錄禁止解析php

訪問控制 – 禁止php解析目錄概要

  • 核心配置文件內容
<Directory /data/wwwroot/www.123.com/upload>
       php_admin_flag engine off
   </Directory>
  • curl測試時直接返回了php源代碼,並未解析

案例

  • 假設有一個目錄是能夠上傳圖片,可是可能被有心之人上傳php上去,由於httpd開放了php模塊,因此若是被人上傳了木馬文件(php類型),httpd就有可能會進行執行,一旦執行,就會讓對方得到咱們服務器的root權限,或者是被惡意刪除或修改一些參數,致使服務器癱瘓或者是被攻擊
  • 案例:
    • 一臺服務器,網站被入侵,但不知道是什麼緣由,不知道怎麼入侵的,也不知道入侵到什麼程度,只知道他們公司的數據庫泄露了,數據是一些電話號碼,黑客並無去刪除數據,由於他知道這個服務器的數據庫裏,電話號碼天天都在增加,它就能夠源源不斷的得到新的電話號碼,得到的電話號碼能夠賣給第三方;
  • 分析:
    • 把一個沒有在這個服務器提交過的電話號碼,在這個服務器的網站上提交一次,結果,立刻就有人打電話過來,證實,黑客得到電話號碼,到打電話給新的用戶,這套體系,已經徹底自動化了(天天都會去抓取一個新的電話號碼來隊列,而後立刻賣給第三方,第三方立刻打電話給這個用戶),因此就猜想,網站的程序(php)存在漏洞,另外一種可能就是sql注入的漏洞(能夠把查詢的sql經過一些特殊的提交,提交到服務器上,服務器就會把這個sql語句轉換成正常的查詢,最終得到一些數據回來);可是sql注入漏洞,很容易修復,只要在網站提交的入口,增長一些特殊符號的過濾,就能徹底的阻斷sql注入的漏洞。
  • 解決方法:
    • 首先抓包,監控數據的查詢,由於電話號碼是經過查詢了數據來的,寫一個死循環的腳本,每隔一分鐘抓一次查詢數據,抓完之後生成一個日誌文件,
    • 查看日誌之後,發現有一條sql查詢,和網站源生的查詢不同,經過日誌定位到了時間點,而後就去web服務器上查看時間點的訪問日誌,經過日誌查看到了一個很是特殊的請求,名字是以php結尾的文件,並且這個php文件是在圖片的目錄下進行訪問的,而後去查看這個php 文件,發現這個文件內容,是獲取服務器的權限,至關於在服務器開了一個後門;這個問題產生的根本緣由,就是由於上傳圖片目錄並無禁止解析php

sql注入

  • 所謂SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。[1] 好比先前的不少影視網站泄露VIP會員密碼大多就是經過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊..

訪問控制 – 禁止php解析

  1. 打開虛擬主機主機配置文件
[root@hf-01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

把代碼放入到配置文件中
 <Directory /data/wwwroot/111.com/upload>
         ##把upload目錄下全部的php禁止解析
        php_admin_flag engine off        //禁止解析php
        <FilesMatch (.*)\.php(.*)>        //如今這裏全部訪問php都會是403
        ##這裏的 .用\脫義
        Order allow,deny                //若是不作這個deny,就會直接訪問到源代碼,這樣就不太友好
        Deny from all
        </FilesMatch>

而後保存退出
  1. 檢查配置文件是否存在語法錯誤,並從新配置文件
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]#
  1. 建立upload目錄,新建php文件
[root@hf-01 111.com]# mkdir upload
[root@hf-01 111.com]# ls
123.php  admin  index.php  QQ111.jpg  upload
[root@hf-01 111.com]# cp 123.php upload/
[root@hf-01 111.com]#
  1. curl訪問
[root@hf-01 111.com]# curl -x127.0.0.1:80 '111.com/upload/123.php' -I
HTTP/1.1 403 Forbidden
Date: Tue, 26 Dec 2017 16:09:43 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 111.com]#
  1. 這時在去虛擬主機配置文件中註釋掉FilesMatch
[root@hf-01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 <Directory /data/wwwroot/111.com/upload>
     ##把upload目錄下全部的php禁止解析
        php_admin_flag engine off
        #<FilesMatch (.*)\.php(.*)>
        ##這裏的 .用\脫義
        #Order allow,deny
        #Deny from all
        #</FilesMatch>
    </Directory>
而後保存退出
  1. 檢查配置文件是否存在語法錯誤,並從新配置文件
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]#
  1. 這時候訪問php,會發現沒法解析php
[root@hf-01 111.com]# !curl
curl -x127.0.0.1:80 '111.com/upload/123.php'
<?php
echo "123.php";
[root@hf-01 111.com]#
  1. 在瀏覽器中訪問http://111.com/upload/123.php,會提示直接下載,這是由於沒法解析php

輸入圖片說明

  1. 這時候再打開虛擬主機配置文件,取消FilesMatch註釋
<Directory /data/wwwroot/111.com/upload>
     ##把upload目錄下全部的php禁止解析
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>
        ##這裏的 .用\脫義
        Order allow,deny
        Deny from all
        </FilesMatch>
    </Directory>
  1. 檢查配置文件是否存在語法錯誤,並從新配置文件
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]#
  1. 這時再去瀏覽器訪問php,會直接顯示Forbidden

輸入圖片說明

  1. 即便去訪問一個不存在的php文件,也會顯示顯示Forbidden

總結

  • 禁止php解析操做,其實就是爲了服務器更加安全,特別是針對能夠寫的目錄
  • 可寫的目錄,通常是不須要解析php,這個須要牢記,通常靜態文件存放的目錄是不容許解析php 的
相關文章
相關標籤/搜索