LAMP(7限定某個目錄禁止解析php、 限制user_agent、 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擴展模塊