1. 程式人生 > >LAMP(7限定某個目錄禁止解析php、 限制user_agent、 PHP相關配置、PHP擴展模塊

LAMP(7限定某個目錄禁止解析php、 限制user_agent、 PHP相關配置、PHP擴展模塊

PHP相關配置

限定某個目錄禁止解析php

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

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

技術分享圖片


禁止步驟

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

技術分享圖片


測試:

技術分享圖片


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

技術分享圖片

技術分享圖片

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

技術分享圖片

測試

技術分享圖片


限制user_agent

user_agent:為瀏覽器的標識

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

技術分享圖片

針對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的訪問

技術分享圖片


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

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

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


測試:

技術分享圖片

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

技術分享圖片


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

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

技術分享圖片

技術分享圖片

訪問日誌查看user_agent技術分享圖片


curl 的常用選項意義:

-A :指定user_agent

-I :顯示狀態碼

-x :相當省略了hosts


PHP相關配置

技術分享圖片


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

(1)網頁上查看:

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

phpinfo();

技術分享圖片

網頁上查看信息:

技術分享圖片

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

技術分享圖片

技術分享圖片

復制後則會出現這樣的信息技術分享圖片

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


(2)命令行查看

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

技術分享圖片

(上面的PHP Warning:這個不是報錯。需要取消的話編輯php.ini 。找到data.timezone技術分享圖片

把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



技術分享圖片

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

技術分享圖片

技術分享圖片


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

技術分享圖片

1.修改display_errors = Off

技術分享圖片修改以後就不會把錯誤信息顯示在瀏覽器中

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

(1)確保:log_errors =On

技術分享圖片

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

技術分享圖片

(3)定義error_log級別:error_reporting

技術分享圖片

技術分享圖片

創建 錯誤日誌路勁文件:

技術分享圖片

並修改權限:

技術分享圖片


測試:

技術分享圖片

技術分享圖片



配置open_basedir:(安全選項)


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


步驟:

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

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

技術分享圖片

技術分享圖片


測試:

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

技術分享圖片


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

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

技術分享圖片報錯。

錯誤日誌內容顯示:

技術分享圖片


正確修改完後

技術分享圖片

訪問正常:

技術分享圖片


如果我們的服務器上有很多個網站都在同一個目錄,那麽直接修改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/"

技術分享圖片

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


技術分享圖片

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

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


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

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

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



PHP擴展模塊安裝


PHP動態擴展模塊

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

技術分享圖片

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

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

技術分享圖片


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

1.先下載redis 的包:

技術分享圖片

2.修改一下名字:

mv develop phpredis-develop.zip

技術分享圖片

3.解壓:

unzip phpredis-develop.zip


4.進入到包裏:

cd phpredis-develop


5.生成configure文件

/usr/local/php/bin/phpize

技術分享圖片

yum install -y autoconf


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


技術分享圖片


6.執行

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

技術分享圖片



7.make

8.make install


技術分享圖片

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

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

技術分享圖片


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

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

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

技術分享圖片

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


(2)編輯php.ini

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

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

extension = redis.so

技術分享圖片


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

技術分享圖片

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

)
















LAMP(7限定某個目錄禁止解析php、 限制user_agent、 PHP相關配置、PHP擴展模塊