限定某個目錄禁止解析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-555d1c5172a6cAccept-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/”目錄是爲了使臨時文件能正常寫入。重載配置文件後生效