????????????????限定某個目錄禁止解析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文件這里開始的步驟
)
轉載于:https://blog.51cto.com/13589255/2088631