PHP安全性漫談
2024-07-09 22:40:06
供稿:網(wǎng)友
本文所討論的安全性環(huán)境是在Linux+Apache+Mysql+PHP。超出此范圍的安全性問(wèn)題不在本文范疇之內(nèi) 一、apache server安全性設(shè)置
1、以Nobody用戶運(yùn)行
一般情況下,Apache是由Root 來(lái)安裝和運(yùn)行的。如果Apache Server進(jìn)程具有Root用戶特權(quán),那么它將給系統(tǒng)的安全構(gòu)成很大的威脅,應(yīng)確保Apache Server進(jìn)程以最可能低的權(quán)限用戶來(lái)運(yùn)行。通過(guò)修改httpd.conf文件中的下列選項(xiàng),以Nobody用戶運(yùn)行Apache 達(dá)到相對(duì)安全的目的。
User nobody
Group# -1
2、ServerRoot目錄的權(quán)限
為了確保所有的配置是適當(dāng)?shù)暮桶踩模枰獓?yán)格控制Apache 主目錄的訪問(wèn)權(quán)限,使非超級(jí)用戶不能修改該目錄中的內(nèi)容。Apache 的主目錄對(duì)應(yīng)于Apache Server配置文件httpd.conf的Server Root控制項(xiàng)中,應(yīng)為:
Server Root /usr/local/apache
3、SSI的配置
在配置文件access.conf 或httpd.conf中的確Options指令處加入Includes NO EXEC選項(xiàng),用以禁用Apache Server 中的執(zhí)行功能。避免用戶直接執(zhí)行Apache 服務(wù)器中的執(zhí)行程序,而造成服務(wù)器系統(tǒng)的公開(kāi)化。
Options Includes Noexec
4、阻止用戶修改系統(tǒng)設(shè)置
在Apache 服務(wù)器的配置文件中進(jìn)行以下的設(shè)置,阻止用戶建立、修改 .htaccess文件,防止用戶超越能定義的系統(tǒng)安全特性。
AllowOveride None
Options None
Allow from all
然后再分別對(duì)特定的目錄進(jìn)行適當(dāng)?shù)呐渲谩?
5、改變Apache 服務(wù)器的缺省訪問(wèn)特性
Apache 的默認(rèn)設(shè)置只能保障一定程度的安全,如果服務(wù)器能夠通過(guò)正常的映射規(guī)則找到文件,那么客戶端便會(huì)獲取該文件,如http://local host/~ root/ 將允許用戶訪問(wèn)整個(gè)文件系統(tǒng)。在服務(wù)器文件中加入如下內(nèi)容:
order deny,ellow
Deny from all
將禁止對(duì)文件系統(tǒng)的缺省訪問(wèn)。
6、CGI腳本的安全考慮
CGI腳本是一系列可以通過(guò)Web服務(wù)器來(lái)運(yùn)行的程序。為了保證系統(tǒng)的安全性,應(yīng)確保CGI的作者是可信的。對(duì)CGI而言,最好將其限制在一個(gè)特定的目 錄下,如cgi-bin之下,便于管理;另外應(yīng)該保證CGI目錄下的文件是不可寫的,避免一些欺騙性的程序駐留或混跡其中;如果能夠給用戶提供一個(gè)安全性 良好的CGI程序的模塊作為參考,也許會(huì)減少許多不必要的麻煩和安全隱患;除去CGI目錄下的所有非業(yè)務(wù)應(yīng)用的腳本,以防異常的信息泄漏。
7、SSL鏈接加密
以上這些常用的舉措可以給Apache Server 一個(gè)基本的安全運(yùn)行環(huán)境,顯然在具體實(shí)施上還要做進(jìn)一步的細(xì)化分解,制定出符合實(shí)際應(yīng)用的安全配置方案。
二、PHP安全性設(shè)置
服務(wù)器并不能阻止所有的安全問(wèn)題,例如程序漏洞問(wèn)題、用戶輸入表單問(wèn)題、PHP文件權(quán)限問(wèn)題等。
也可以通過(guò)一些手段來(lái)迷惑黑客或者別有用心者。
1、程序代碼漏洞問(wèn)題
很多 PHP 程序所存在的重大弱點(diǎn)并不是 PHP 語(yǔ)言本身的問(wèn)題,而是編程者的安全意識(shí)不高而導(dǎo)致的。因此,必須時(shí)時(shí)注意每一段代碼可能存在的問(wèn)題,去發(fā)現(xiàn)非正確數(shù)據(jù)提交時(shí)可能造成的影響。
復(fù)制代碼 代碼如下:
<?php
unlink ($evil_var);
fwrite ($fp, $evil_var);
system ($evil_var);
exec ($evil_var);
?>
必須時(shí)常留意你的代碼,以確保每一個(gè)從客戶端提交的變量都經(jīng)過(guò)適當(dāng)?shù)臋z查,然后問(wèn)自己以下一些問(wèn)題:
此腳本是否只能影響所預(yù)期的文件?
非正常的數(shù)據(jù)被提交后能否產(chǎn)生作用?
此腳本能用于計(jì)劃外的用途嗎?
此腳本能否和其它腳本結(jié)合起來(lái)做壞事?
是否所有的事務(wù)都被充分記錄了?
在寫代碼的時(shí)候問(wèn)自己這些問(wèn)題,否則以后可能要為了增加安全性而重寫代碼了。注意了這些問(wèn)題的話,也許還不完全能保證系統(tǒng)的安全,但是至少可以提高安全性。