


對php的配置加強(qiáng)安全
添加時(shí)間:2010-11-7
添加:
admin
前面象Shaun Clowes和rfp等都比較詳細(xì)的介紹了php、cgi程序在編程過程中遇到的問題,以及如何通 過應(yīng)用程序漏洞突破系統(tǒng),這篇文章我們來通過對php的一些服務(wù)器端特性來進(jìn)行配置加強(qiáng)php的安全。寫 cgi腳本的時(shí)候我們的確一定注意各種安全問題,對用戶輸入進(jìn)行嚴(yán)格的過濾,但是常在岸邊走哪有不濕鞋 ,吃燒餅?zāi)挠胁坏糁ヂ椋擞惺泷R有失手,連著名的phpnuke、phpMyAdmin等程序都出現(xiàn)過很嚴(yán)重的 問題,更何況象我等小混混寫的腳本。所以現(xiàn)在我們假設(shè)php腳本已經(jīng)出現(xiàn)嚴(yán)重問題,比如象前一陣子 phpnuke的可以上傳php腳本的大問題了,我們?nèi)绾瓮ㄟ^對服務(wù)器的配置使腳本出現(xiàn)如此問題也不能突破 系統(tǒng)。
1、編譯的時(shí)候注意補(bǔ)上已知的漏洞
從4.0.5開始,php的mail函數(shù)加入了第五個(gè)參數(shù),但它沒有好好過濾,使得php應(yīng)用程序能突破 safe_mode的限制而去執(zhí)行命令。所以使用4.0.5和4.0.6的時(shí)候在編譯前我們需要修改php源碼包里 ext/standard/mail.c文件,禁止mail函數(shù)的第五參數(shù)或過濾shell字符。在mail.c文件的第152 行,也就是下面這行:
if (extra_cmd != NULL) { 后面加上extra_cmd=NULL;或extra_cmd = php_escape_shell_cmd(extra_cmd);然后編譯php 那么我們就修補(bǔ)了這個(gè)漏洞。
2、修改php.ini配置文件 以php發(fā)行版的php.ini-dist為藍(lán)本進(jìn)行修改。
1)Error handling and logging
在Error handling and logging部分可以做一些設(shè)定。先找到:
display_errors = On
php缺省是打開錯(cuò)誤信息顯示的,我們把它改為:
display_errors = Off
關(guān)閉錯(cuò)誤顯示后,php函數(shù)執(zhí)行錯(cuò)誤的信息將不會(huì)再顯示給用戶,這樣能在一定程度上防止攻擊者從 錯(cuò)誤信息得知腳本的物理位置,以及一些其它有用的信息,起碼給攻擊者的黑箱檢測造成一定的障礙 。這些錯(cuò)誤信息可能對我們自己有用,可以讓它寫到指定文件中去,那么修改以下:
log_errors = Off
改為:
log_errors = On
以及指定文件,找到下面這行:
;error_log = filename
去掉前面的;注釋,把filename改為指定文件,如/usr/local/apache/logs/php_error.log error_log = /usr/local/apache/logs/php_error.log
這樣所有的錯(cuò)誤都會(huì)寫到php_error.log文件里。
2)Safe Mode
php的safe_mode功能對很多函數(shù)進(jìn)行了限制或禁用了,能在很大程度解決php的安全問題。在 Safe Mode部分找到:
safe_mode = Off
改為:
safe_mode = On
這樣就打開了safe_mode功能。象一些能執(zhí)行系統(tǒng)命令的函數(shù)shell_exec()和``被禁止,其它的一 些執(zhí)行函數(shù)如:exec(), system(), passthru(), popen()將被限制只能執(zhí)行 safe_mode_exec_dir指定目錄下的程序。如果你實(shí)在是要執(zhí)行一些命令或程序,找到以下:
safe_mode_exec_dir =
指定要執(zhí)行的程序的路徑,如:
safe_mode_exec_dir = /usr/local/php/exec
然后把要用的程序拷到/usr/local/php/exec目錄下,這樣,象上面的被限制的函數(shù)還能執(zhí)行該目錄 里的程序。
關(guān)于安全模式下受限函數(shù)的詳細(xì)信息請查看php主站的說明:
http://www.php.net/manual/en/features.safe-mode.php
3)disable_functions
如果你對一些函數(shù)的危害性不太清楚,而且也沒有使用,索性把這些函數(shù)禁止了。找到下面這行:
disable_functions = 在”=“后面加上要禁止的函數(shù),多個(gè)函數(shù)用”,“隔開。
3、修改httpd.conf
如果你只允許你的php腳本程序在web目錄里操作,還可以修改httpd.conf文件限制php的操作路徑。比 如你的web目錄是/usr/local/apache/htdocs,那么在httpd.conf里加上這么幾行:
php_admin_value open_basedir /usr/local/apache/htdocs
這樣,如果腳本要讀取/usr/local/apache/htdocs以外的文件將不會(huì)被允許,如果錯(cuò)誤顯示打開的話 會(huì)提示這樣的錯(cuò)誤:
Warning: open_basedir restriction in effect. File is in wrong directory in /usr/local/apache/htdocs/open.php on line 4 等等。
4、對php代碼進(jìn)行編譯
Zend對php的貢獻(xiàn)很大,php4的引擎就是用Zend的,而且它還開發(fā)了ZendOptimizer和ZendEncode 等許多php的加強(qiáng)組件。優(yōu)化器ZendOptimizer只需在http://www.zend.com注冊就可以免費(fèi)得到, 下面幾個(gè)是用于4.0.5和4.0.6的ZendOptimizer,文件名分別對于各自的系統(tǒng):
ZendOptimizer-1.1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Solaris-sparc.ta
1、編譯的時(shí)候注意補(bǔ)上已知的漏洞
從4.0.5開始,php的mail函數(shù)加入了第五個(gè)參數(shù),但它沒有好好過濾,使得php應(yīng)用程序能突破 safe_mode的限制而去執(zhí)行命令。所以使用4.0.5和4.0.6的時(shí)候在編譯前我們需要修改php源碼包里 ext/standard/mail.c文件,禁止mail函數(shù)的第五參數(shù)或過濾shell字符。在mail.c文件的第152 行,也就是下面這行:
if (extra_cmd != NULL) { 后面加上extra_cmd=NULL;或extra_cmd = php_escape_shell_cmd(extra_cmd);然后編譯php 那么我們就修補(bǔ)了這個(gè)漏洞。
2、修改php.ini配置文件 以php發(fā)行版的php.ini-dist為藍(lán)本進(jìn)行修改。
1)Error handling and logging
在Error handling and logging部分可以做一些設(shè)定。先找到:
display_errors = On
php缺省是打開錯(cuò)誤信息顯示的,我們把它改為:
display_errors = Off
關(guān)閉錯(cuò)誤顯示后,php函數(shù)執(zhí)行錯(cuò)誤的信息將不會(huì)再顯示給用戶,這樣能在一定程度上防止攻擊者從 錯(cuò)誤信息得知腳本的物理位置,以及一些其它有用的信息,起碼給攻擊者的黑箱檢測造成一定的障礙 。這些錯(cuò)誤信息可能對我們自己有用,可以讓它寫到指定文件中去,那么修改以下:
log_errors = Off
改為:
log_errors = On
以及指定文件,找到下面這行:
;error_log = filename
去掉前面的;注釋,把filename改為指定文件,如/usr/local/apache/logs/php_error.log error_log = /usr/local/apache/logs/php_error.log
這樣所有的錯(cuò)誤都會(huì)寫到php_error.log文件里。
2)Safe Mode
php的safe_mode功能對很多函數(shù)進(jìn)行了限制或禁用了,能在很大程度解決php的安全問題。在 Safe Mode部分找到:
safe_mode = Off
改為:
safe_mode = On
這樣就打開了safe_mode功能。象一些能執(zhí)行系統(tǒng)命令的函數(shù)shell_exec()和``被禁止,其它的一 些執(zhí)行函數(shù)如:exec(), system(), passthru(), popen()將被限制只能執(zhí)行 safe_mode_exec_dir指定目錄下的程序。如果你實(shí)在是要執(zhí)行一些命令或程序,找到以下:
safe_mode_exec_dir =
指定要執(zhí)行的程序的路徑,如:
safe_mode_exec_dir = /usr/local/php/exec
然后把要用的程序拷到/usr/local/php/exec目錄下,這樣,象上面的被限制的函數(shù)還能執(zhí)行該目錄 里的程序。
關(guān)于安全模式下受限函數(shù)的詳細(xì)信息請查看php主站的說明:
http://www.php.net/manual/en/features.safe-mode.php
3)disable_functions
如果你對一些函數(shù)的危害性不太清楚,而且也沒有使用,索性把這些函數(shù)禁止了。找到下面這行:
disable_functions = 在”=“后面加上要禁止的函數(shù),多個(gè)函數(shù)用”,“隔開。
3、修改httpd.conf
如果你只允許你的php腳本程序在web目錄里操作,還可以修改httpd.conf文件限制php的操作路徑。比 如你的web目錄是/usr/local/apache/htdocs,那么在httpd.conf里加上這么幾行:
php_admin_value open_basedir /usr/local/apache/htdocs
這樣,如果腳本要讀取/usr/local/apache/htdocs以外的文件將不會(huì)被允許,如果錯(cuò)誤顯示打開的話 會(huì)提示這樣的錯(cuò)誤:
Warning: open_basedir restriction in effect. File is in wrong directory in /usr/local/apache/htdocs/open.php on line 4 等等。
4、對php代碼進(jìn)行編譯
Zend對php的貢獻(xiàn)很大,php4的引擎就是用Zend的,而且它還開發(fā)了ZendOptimizer和ZendEncode 等許多php的加強(qiáng)組件。優(yōu)化器ZendOptimizer只需在http://www.zend.com注冊就可以免費(fèi)得到, 下面幾個(gè)是用于4.0.5和4.0.6的ZendOptimizer,文件名分別對于各自的系統(tǒng):
ZendOptimizer-1.1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Solaris-sparc.ta
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解