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

防止***上傳一個目錄文件php,網站會從而解析php,對我們的網站有很大的危險。

因此,我們需要在能上傳文件的目錄直接禁止解析PHP代碼

blob.png


禁止步驟

1.編輯虛擬主機配置文件:增添內容



核心配置文件內容

? ? <Directory /data/wwwroot/111.com/upload>

? ? ? ? php_admin_flag engine off ? //禁止解析PHP這行即可


? ? ? <FilesMatch ?(.*)\.php(.*)> ? //加上這個deny是可以防止解析我們xxx.php(.*)源代碼

? ? ? ? Order deny,allow

? ? ? ? Deny from all

? ? ? </FilesMatch>


? ? </Directory>


修改完后:

改完了配置文件需要重新加載一下:

/usr/local/apache2.4/bin/apachectl -t ?(檢測)

/usr/local/apache2.4/bin/apachectl graceful (加載)


創建upload目錄:(在/data/wwwroot/111.com/下創建

cd /data/wwwroot/111.com

mkdir upload

復制admin.php到upload下并改名為test.php

blob.png


測試:

blob.png


此時只是顯示test.php源代碼

blob.png

blob.png

去掉這個標簽內容,再測試,連訪問的權限都沒有

blob.png

測試

blob.png


?????????????????限制user_agent

user_agent:為瀏覽器的標識

當很多用戶同時訪問同一個站點,這樣會很消耗服務器資源

blob.png

針對user_agent做訪問控制步驟:

1.編輯虛擬主機配置文件:增添內容

<IfModule mod_rewrite.c> ?

? ? ? ? RewriteEngine on

? ? ? ? RewriteCond %{HTTP_USER_AGENT} ?.*curl.* [NC,OR]?

? ? ? ? RewriteCond %{HTTP_USER_AGENT} ?.*baidu.com.* [NC]

? ? ? ? RewriteRule ?.* ?- ?[F] ? ? ? ? ??

</IfModule>

限制.*curl.或者.*baidu.com.這兩個user_agent的訪問

blob.png


改完了配置文件需要重新加載一下:

/usr/local/apache2.4/bin/apachectl -t ?(檢測)

/usr/local/apache2.4/bin/apachectl graceful (加載)


測試:

blob.png

在日志文件可以看出:user_agent是我們的定義的curl

blob.png


指定user_agent進行測試 curl -A(加-A選項)

?curl -A "cansheng" -x192.168.136.133:80 'http://111.com/admin.php' -I?

blob.png

blob.png

訪問日志查看user_agentblob.png


curl 的常用選項意義:

-A :指定user_agent

-I ? ?:顯示狀態碼

-x ?:相當省略了hosts


?????????????????????????????PHP相關配置

blob.png


查看我們的配置文件位置:(111.com虛擬主機)

(1)網頁上查看:

首先得在 /data/wwwroot/111.com/index.php下編輯添加

phpinfo();

blob.png

網頁上查看信息:

blob.png

cp ?/usr/local/src/php-5.6.30/php.ini-development /usr/local/php/etc/php.ini

blob.png

blob.png

復制后則會出現這樣的信息blob.png

這就是我們配置文件php.ini的位置


(2)命令行查看

usr/local/php/bin/php -i|grep -i "loaded configuration file"?

blob.png

(上面的PHP Warning:這個不是報錯。需要取消的話編輯php.ini ?。找到data.timezoneblob.png

?

把PHP里的一些函數禁掉:

步驟:

1.修改配置文件:vim /usr/local/php/etc/php.ini

增添要禁止的函數

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



blob.png

禁止了phpinfo()函數后再次訪問111.com/index.php(內有phpinfo())則不會顯示函數的內容:

blob.png

blob.png


配置error_log (不讓錯誤信息顯示在瀏覽器中)

blob.png

1.修改display_errors = Off

blob.png修改以后就不會把錯誤信息顯示在瀏覽器中

2.定義錯誤日志的路徑:

(1)確保:log_errors =On

blob.png

(2)路徑:error_log = /tmp/log/php/php_errors.log(自定義路徑)

blob.png

(3)定義error_log級別:error_reporting

blob.png

blob.png

創建 錯誤日志路勁文件:

blob.png

并修改權限:

blob.png


測試:

blob.png

blob.png



配置open_basedir:(安全選項)


open_basedir:作用是將網站限制在指定的目錄里,就算***黑了這個網址也只能在這個目錄下操作,影響不了其他目錄下的網站。(一臺服務器可以跑多個網站)


步驟:

1.修改配置文件,增加內容。

增加限定所在目錄(多個目錄用“:”隔開

blob.png

blob.png


測試:

故意把限定目錄改成不存在的一個目錄:

blob.png


運行:?curl -x192.168.136.133:80 111.com/index.php -I?

(index.php是在111.com目錄下的)

blob.png報錯。

錯誤日志內容顯示:

blob.png


正確修改完后

blob.png

訪問正常:

blob.png


如果我們的服務器上有很多個網站都在同一個目錄,那么直接修改php.ini就不是這么合適。php.ini是針對所有的站點的。

解決方法:

對單個虛擬主機設置open_basedir



步驟:

修改虛擬主機配置文件:

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

增添內容:

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

blob.png

php_admin_value ?可以定義php.ini里面的參數:


blob.png

這樣兩臺虛擬主機都限定在各自的目錄下

(/tmp 目錄基本都得添加到限制目錄中,這個是因為一些臨時限制文件一般的都是先存放在/tmp,不加tmp則類似圖片上傳也不能正確使用)


(切記:每次修改完配置文件都要檢測和加載

/usr/local/apache2.4/bin/apachectl -t ?(檢測)

/usr/local/apache2.4/bin/apachectl graceful (加載)



?????????????????????????????????PHP擴展模塊安裝


PHP動態擴展模塊

當我們的需求變更時,我們的模塊在一開始配置完成后沒有變更時的模塊,那么就需要動態擴展:

blob.png

查看PHP目前都加載了什么模塊

/usr/local/php/bin/php -m?

blob.png


下面安裝一個redis的模塊(?放在/usr/local/src/目錄下)

1.先下載redis 的包:

blob.png

2.修改一下名字:

mv develop phpredis-develop.zip

blob.png

3.解壓:

unzip phpredis-develop.zip


4.進入到包里:

cd phpredis-develop


5.生成configure文件

/usr/local/php/bin/phpize?

blob.png

yum install -y autoconf


安裝完成后再執行/usr/local/php/bin/phpize?


blob.png


6.執行

./configure --with-php-config=/usr/local/php/bin/php-config

blob.png



7.make

8.make ?install


blob.png

安裝完后:生成有redis.so這個文件,這正是我想要的?

但是此時我們的php并沒有加載到這個模塊

blob.png


9.配置,讓php加載這個redis模塊:

(1)查看擴展模塊存放目錄,(我們可以在php.ini中去自定義該路徑)

/usr/local/php/bin/php -i |grep extension_dir?

blob.png

下載的模塊都是默認放在這里的:


(2)編輯php.ini

vim /usr/local/php/etc/php.ini

增加一行配置(可以放到文件最后一行)

extension = redis.so ?

blob.png


最后就可以查看到php加載了這個模塊

blob.png

(編譯一個擴展模塊的時候,如果如果自帶的源碼包里(php)的ext目錄下有我們想要的模塊,那么就可以直接在ext編譯它 ,不用下載,先進入該包然后執行生成configure文件這里開始的步驟

)