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