今天北京匯仁智杰小編通過對php的一些服務(wù)器端特性來進(jìn)行配置加強php的安全。寫 cgi腳本的時候我們的確一定注意各種安全問題,對用戶輸入進(jìn)行嚴(yán)格的過濾。
現(xiàn)在我們假設(shè)php腳本已經(jīng)出現(xiàn)嚴(yán)重問題,比如象前一陣子 phpnuke的可以上傳php腳本的大問題了,我們?nèi)绾瓮ㄟ^對服務(wù)器的配置使腳本出現(xiàn)如此問題也不能突破系統(tǒng)。
1.編譯的時候注意補上已知的漏洞
從4.0.5開始,php的mail函數(shù)加入了第五個參數(shù),但它沒有好好過濾,使得php應(yīng)用程序能突破safe_mode的限制而去執(zhí)行命令。所以使用4.0.5和4.0.6的時候,在編譯前我們需要修改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,那么我們就修補了這個漏洞。
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缺省是打開錯誤信息顯示的,我們把它改為:
display_errors = Off
關(guān)閉錯誤顯示后,php函數(shù)執(zhí)行錯誤的信息將不會再顯示給用戶,這樣能在一定程度上防止攻擊者從錯誤信息得知腳本的物理位置,以及一些其它有用的信息,起碼給攻擊者的黑箱檢測造成一定的障礙 。這些錯誤信息可能對我們自己有用,可以讓它寫到指定文件中去,那么修改以下:
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
這樣所有的錯誤都會寫到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指定目錄下的程序。如果你實在是要執(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主站的說明:
[url]http://www.php.net/manual/en/features.safe-mode.php[/url]
3)disable_functions
如果你對一些函數(shù)的危害性不太清楚,而且也沒有使用,索性把這些函數(shù)禁止了。找到下面這行:
disable_functions =
在”=“后面加上要禁止的函數(shù),多個函數(shù)用“,”隔開。
3.修改httpd.conf
如果你只允許你的php腳本程序在web目錄里操作,還可以修改httpd.conf文件限制php的操作路徑。比如你的web目錄是/usr/local/apache/htdocs,那么在 httpd.conf里加上這么幾行:
< Directory /usr/local/apache/htdocs>
php_admin_value open_basedir /usr/local/apache/htdocs</Directory>
這樣,如果腳本要讀取/usr/local/apache/htdocs以外的文件將不會被允許,如果錯誤顯示打開的話
會提示這樣的錯誤:
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的加強組件。優(yōu)化器ZendOptimizer只需在[url]http://www.zend.com[/url]注冊就可以免?/a>
ZendOptimizer-1[1].1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1[1].1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1[1].1.0-PHP_4.0.5-Solaris-sparc.tar.gz
ZendOptimizer-1[1].1.0-PHP_4.0.5-Windows-i386.zip
5.文件及目錄的權(quán)限設(shè)置
web 目錄里除了上傳目錄,其它的目錄和文件的權(quán)限一定不能讓nobody用戶有寫 權(quán)限。否則,攻擊者可以修改主頁文件,所以web目錄的權(quán)限一定要設(shè)置好。還有,php腳本的屬主千萬不能是root,因為safe_mode下讀文件的 函數(shù)被限制成被讀文件的屬主必須和當(dāng)前執(zhí)行腳本的屬主是一樣才能被讀,否則如果錯誤顯示打開的話會顯示諸如以下的錯誤:
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /usr/local/apache/htdocs/open.php on line 3
這樣我們能防止許多系統(tǒng)文件被讀,比如:/etc/passwd等。
上傳目錄和上傳腳本的屬主也要設(shè)成一樣,否則會出現(xiàn)錯誤的,在safe_mode下這些要注意。
優(yōu)化器的安裝非常方便,包里面都有詳細(xì)的說明。以UNIX版本的為例,看清操作系統(tǒng),把包里的ZendOptimizer.so文件解壓到一個目錄,假設(shè)是/usr/local/lib下,在php.ini里加上兩句:
zend_optimizer.optimization_level=15
zend_extension="/usr/local/lib/ZendOptimizer.so"
就可以了。用phpinfo()看到Zend圖標(biāo)左邊有下面文字:
with Zend Optimizer v1.1.0, Copyright (c) 1998-2000, by Zend Technologies
6.mysql的啟動權(quán)限設(shè)置
mysql要注意的是不要用root來啟動,最好另外建一個mysqladm用戶。可以在 /etc/rc.local等系統(tǒng)啟動腳本里加上一句:
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"
這樣系統(tǒng)重啟后,也會自動用mysqladmin用戶啟動mysql進(jìn)程。
那么,優(yōu)化器已經(jīng)掛接成功了。
但是編譯器ZendEncode并不是免費的。
php腳本編譯后,腳本的執(zhí)行速度增加不少,腳本文件只能看到一堆亂碼,這將阻止攻擊者進(jìn)一步分析服務(wù)器上的腳本程序,而且原先在php腳本里以明文存儲的口令也得到了保密,如mysql的口令。不過在服務(wù)器端改腳本就比較麻煩了,還是本地改好再上傳吧。
7.日志文件及上傳目錄的審核及
查看日志和人的惰性有很大關(guān)系,要從那么大的日志文件里查找攻擊痕跡有些大海撈針,而且也未必有。 web上傳的目錄里的文件,也應(yīng)該經(jīng)常檢查,也許程序有問題,用戶傳上了一些非法的文件,比如執(zhí)行腳本等。
8.操作系統(tǒng)自身的補丁
一樣,給系統(tǒng)打已知漏洞的補丁是系統(tǒng)管理員最基本的職責(zé),這也是最后一道防線。
經(jīng)過以上的配置,雖然說不上固若金湯,但是也在相當(dāng)程度上給攻擊者的測試造成很多麻煩,即使php腳本程序出現(xiàn)比較嚴(yán)重的漏洞,攻擊者也無法造成實際性的破壞。
免費學(xué)習(xí)課堂
- 免費推廣知識
- 競價推廣知識
- 新媒體營銷知識
- 網(wǎng)站運營知識
- 網(wǎng)站設(shè)計知識
- 網(wǎng)站建設(shè)知識
- Web前端知識
- 軟文營銷知識
- 網(wǎng)站策劃知識
- 整合營銷
推薦文章
匯仁智杰教你加強php的安全,對php一些服務(wù)器端特性配置
來源:北京匯仁智杰科技有限公司 時間:2016-04-08 點擊: 次
推薦文章
- 織夢dedecms漏洞修復(fù)大全含任意文件2016-09-05
- 整頓微信公眾號過度營銷 對嚴(yán)重違2016-01-26
- SEO優(yōu)化過程要避免什么?2016-01-26
- 網(wǎng)站空間被掛馬的原因原因及解決2016-01-26
- 2016企業(yè)該如何運用互聯(lián)網(wǎng)進(jìn)行營銷2016-01-26
- WEB前端項目開發(fā)中需注意的細(xì)節(jié)2016-01-26
- 低價網(wǎng)站建設(shè)的危害有哪些?2016-01-15
- 如何詳細(xì)的分析你網(wǎng)站的競爭對手2015-06-10
- 網(wǎng)站設(shè)計中四個常犯的錯誤2015-01-22
- 如何搭配網(wǎng)站設(shè)計中的色彩?2015-01-22