訪問控制-禁止php解析、user_agent,PHP相關配置

限定某個目錄禁止解析php

上傳圖片的目錄不需要解析php,靜態文件存放目錄不允許放php的。

  • 編輯apache虛擬主機配置文件:

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

    添加下面內容:
    <Directory /data/wwwroot/111.com/upload>
    php_admin_flag engine off
    </Directory>

    測試並重載配置文件:
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
    Syntax OK
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

  • 創建相應的目錄並放入對應文件

    [root@localhost 111.com]# mkdir upload
    ……
    [root@localhost 111.com]# ls upload/
    123.php abc.jpg baidu.png

  • 測試

    訪問123.php文件:
    [root@localhost 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/123.php'
    <?php
    echo "welcom to 123file";
    ?>

    直接顯示源代碼,即無法進行php解析。

    訪問baidu.png文件:
    [root@localhost 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/baidu.png' -I
    HTTP/1.1 200 OK
    Date: Thu, 03 Aug 2017 04:47:16 GMT
    Server: Apache/2.4.27 (Unix) PHP/5.6.30
    Last-Modified: Thu, 03 Aug 2017 04:25:26 GMT
    ETag: "e7a-555d1c5172a6c"
    Accept-Ranges: bytes
    Content-Length: 3706
    Content-Type: image/png
    #正常訪問圖片文件。

  • 添加php訪問權限

    添加參數“< FilesMatch (.)\ .php(. ) ”

    [root@localhost 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

    添加下面的配置:
    <Directory /data/wwwroot/111.com/upload>
    php_admin_flag engine off
    <FilesMatch (.).php(.)>
    Order Allow,Deny
    Deny from all
    </FilesMatch>
    </Directory>

    測試並重載配置文件:
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
    Syntax OK
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

  • 測試

    訪問123.php:
    [root@adailinux 111.com]# curl -x127.0.0.1:80 111.com/upload/123.php -I
    HTTP/1.1 403 Forbidden
    Date: Thu, 03 Aug 2017 04:28:49 GMT
    Server: Apache/2.4.27 (Unix) PHP/5.6.30
    Content-Type: text/html; charset=iso-8859-1
    #返回狀態碼爲403,即無法訪問。

    訪問baidu.png:
    [root@localhost 111.com]# curl -x127.0.0.1:80 111.com/upload/baidu.png -I
    HTTP/1.1 200 OK
    Date: Thu, 03 Aug 2017 04:29:25 GMT
    Server: Apache/2.4.27 (Unix) PHP/5.6.30
    Last-Modified: Thu, 03 Aug 2017 04:25:26 GMT
    ETag: "e7a-555d1c5172a6c

    Accept-Ranges: bytes
    Content-Length: 3706
    Content-Type: image/png

    正常訪問其它文件。

訪問控制-user_agent

user_agent(用戶代理):可以理解爲瀏覽器標識。

需求背景:有時候網站受到CC***,其原理是:***者藉助代理服務器(肉機)生成指向受害主機的合法請求,實現DDOS和僞裝,CC***的一個特點就是其useragent是一致的,所以,可以通過限制***者useragent的方法來阻斷其***。

  • 編輯apache虛擬主機的配置文件

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} .curl. [NC,OR]

    NC 忽略大小寫, OR 或者的意思,與嚇一跳語句相關

    RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
    RewriteRule  .*  -  [F]
    #F 是Fobidden禁止

    </IfModule>

    測試並重載配置文件:
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
    Syntax OK
    [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful

  • 檢測

    使用curl直接訪問:

    [root@adailinux 111.com]# curl -x192.168.8.131:80 'http://111.com/123.php' -I
    HTTP/1.1 403 Forbidden
    Date: Thu, 03 Aug 2017 06:59:14 GMT
    Server: Apache/2.4.27 (Unix) PHP/5.6.30
    Content-Type: text/html; charset=iso-8859-1

    返回值爲403,禁止訪問。

    使用agent aminglinux aminglinux訪問:

    [root@adailinux 111.com]# curl -A "aminglinux aminglinux" -x192.168.8.131:80 'http://111.com/123.php' -I
    HTTP/1.1 200 OK
    Date: Thu, 03 Aug 2017 07:01:01 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
    [root@adailinux 111.com]# curl -A "aminglinux aminglinux" -x192.168.8.131:80 'http://111.com/123.php'
    welcom to 123file

    正常訪問

curl-A 指定useragent。curl -A “abc”。

PHP相關配置

  • 查看php配置文件位置

    查看php配置文件路徑有兩種方法。1.通過命令查找 2.通過php網頁信息查找。(較準)

    使用命令查看:
    /usr/local/php/bin/php -i|grep -i "loaded configuration file"

    通過php網頁信息查看:
    在網頁文件的目錄下創建一個phpinfo文件。文件名爲1.php。
    內容爲:
    <?php
    phpinfo();
    ?>

    通瀏覽器過訪問該文件,可知php配置文件路徑。Loaded Configuration File 後跟的就是php配置文件路徑。

  • disable_function

eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo 以上爲php中比較危險的函數,可以用過“disable_function”來限制,以達到提高網站安全性的目的

[root@localhost /]# vim /usr/local/php/etc/php.ini 
disable_functions默認是空的。(303行)
disable_functions =eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo
# 添加phpinfo慘術後就無法訪問phpinfo頁面。

檢查並重載配置文件:
[root@localhost /]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost /]# /usr/local/apache2.4/bin/apachectl graceful

display_errors = Off(459行)
#會把錯誤的信息顯示到瀏覽器上,一般情況設置爲off。使用curl訪問也沒有任何輸出。

重載配置文件之後,無法通過網頁訪問phpinfo頁面。很多企業會在生成環境中將phpinfo限制。

  • date.timezone

    設定時區

    [root@localhost /]# vim /usr/local/php/etc/php.ini

    timezone默認爲空

    date.timezone =Asia/Chongqing (Shanghai)

  • 日誌

    log_error=On/Off 開啓或關閉錯誤日誌(487行)

    錯誤日誌路徑:
    ;error_log = php_errors.log
    #默認顯示(572行)

    修改成指定路徑:
    error_log = /tmp/php_errors.log

    需要將前面的;(分號)去掉。

    定義日誌的級別:

    error_reporting = EALL
    #默認(449行)
    級別有:E
    ALL(最不嚴謹的) 、~E NOTICE 、~E STRICT、~EDEPRECATED(可以自由組合)
    生產環境使用:E
    ALL & ~E_ NOTICE就可以。

    日誌級別的定義解釋:
    E_ALL (Show all errors, warnings and notices including coding standards.)
    ; E_ALL & ~E_NOTICE (Show all errors, except for notices)
    ; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)
    ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)

    檢測並重載配置文件:
    [root@localhost /]# /usr/local/apache2.4/bin/apachectl -t
    Syntax OK
    [root@localhost /]# /usr/local/apache2.4/bin/apachectl graceful

配置好之後,只要有錯誤日誌,就會記錄在/tmp/php_errors.log 文件中。

如果沒有生成錯誤日誌則使用命令 grep error_log /usr/local/php/etc/php.ini 查看錯誤日誌路徑。然後按照這個路徑創建一個文件並給文件加上777權限。

  • open_basedir

    這是一個安全選項。當只要一個站點被人拿下,服務器上的其他站點就會跟着遭殃,設置open_basedir之後,雖然不能詳細控制以某個用戶運行某個站點,但至少不會再出現整個服務器被拿下的局面。open_basedir可將用戶訪問文件的活動範圍限制在指定的區域,通常是其家目錄的路徑。

    在/usr/local/php/etc/php.ini 是限制所有站點。如果一臺服務器跑了多個站點,只能去虛擬主機配置文件裏配置。

    [root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
    在每臺虛擬主機配置中加入下面內容,修改open_basedir 爲DocumentRoot 的地址。
    php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

    說明: “php_admin_value”可以定義php.ini中的參數。使用該辦法分別在每個虛擬主機設定相關的“open_basedir”即可!
    在此開放“/tmp/”目錄是爲了使臨時文件能正常寫入。

    重載配置文件後生效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章