PHP安全配置
來源:互聯網
上載者:User
PHP是非常強大的伺服器端指令碼語言,但是強大的功能總是伴隨著重大的危險,PHP本身老版本有一些問題,比如在 php4.3.10和php5.0.3以前有一些比較嚴重的bug,所以推薦使用新版。另外,目前鬧的轟轟烈烈的SQL Injection也是在PHP上有很多利用方式,所以要保證安全,PHP代碼編寫是一方面,PHP的配置更是非常關鍵。在這節裡,你將學習修改 PHP.ini檔案來阻止一些PHP潛在的危險因素 。
一、 php.ini檔案的選擇
設定有效 PHP 設定檔,php.ini。壓縮包中包括兩個 ini 檔案,php.ini-dist 和 php.ini-recommended。建議使用 php.ini-recommended,因為此檔案對預設設定作了效能和安全上的最佳化。仔細閱讀此檔案中的說明並研究 ini 設定 一章來親自人工設定每個項目。如果要達到最佳的安全效果,則最好用這個檔案,儘管 PHP 在預設的 ini 檔案下也工作的很好。將選擇的 ini 檔案拷貝到 PHP 能夠找到的目錄下並改名為 php.ini。PHP 預設在 Windows 目錄下搜尋 php.ini:
在 Windows 9x/ME/XP 下將選擇的 ini 檔案拷貝到 %WINDIR%,通常為 c:\windows。
在 Windows NT/2000 下將選擇的 ini 檔案拷貝到 %WINDIR% 或 %SYSTEMROOT% 下,通常為 c:\winnt 或 c:\winnt40 對應於伺服器版本。
如果在 Windows NT,2000 或 XP 中使用了 NTFS,確保運行 webserver 的使用者名稱對 php.ini 有讀取的許可權(例如使其對 Everyone 可讀)。
php.ini -dist 一般用於程式開發。
php.ini -recommended 用於線上服務使用。
二、 php.ini檔案的修改
php的安全模式是個非常重要的內嵌的安全機制,能夠控制一些php中的函數,比如system(),同時把很多檔案操作函數進行了許可權控制,也不允許對某些關鍵檔案的檔案,比如/etc/passwd,但是預設的php.ini是沒有開啟安全模式的,我們把它開啟。
1、找到"safe_mode=off"改為"safe_mode=on"
象一些能執行系統命令的函數shell_exec()和``被禁止,其它的一些執行函數如:exec(), system(), passthru(),popen()將被限制只能執行safe_mode_exec_dir指定目錄下的程式。如果你實在是要執行一些命令或程式,找到 以下:
safe_mode_exec_dir =
指定要執行的程式的路徑,如:
safe_mode_exec_dir = c:\wwwroot
然後把要用的程式拷到c:\wwwroot目錄下,這樣,象上面的被限制的函數還能執行該目錄裡的程式
2、找到"display_errors=on"改為"display_errors=off"
一般php在沒有串連到資料庫或者其他情況下會有提示錯誤,一般錯誤資訊中會包含php指令碼當前的路徑資訊或者查詢的SQL語句等資訊,這類資訊提供給駭客後,是不安全的,所以一般伺服器建議禁止錯誤提示 。
display_errors = Off
log_errors = On
同時也要設定錯誤記錄檔存放的目錄 找到下面這行
;error_log = filename
去掉前面的;注釋,把filename改為指定檔案
error_log = D:/usr/php_error.log
3、找到"disable_functions="改為:"disable_functions=phpinfo,system,exec,passthru,shell_exec,popen,is_dir".
我們覺得不希望執行包括system()等在內的能夠執行命令的php函數,或者能夠查看php資訊的phpinfo()等函數,那麼我們就可以禁止它們:
4、尋找:magic_quotes_gpc 如果是Off的話改成On
開啟magic_quotes_gpc來防止SQL注入。
5、尋找:register_globals
在PHP中提交的變數,包括使用POST或者GET提交的變數,都將自動註冊為全域變數,能夠直接存取,這是對伺服器非常不安全的,所以我們不能讓它註冊為全域變數,就把註冊全域變數選項關閉:
6、尋找:open_basedir 後面增加 /www/ /*說明:www為網站程式所放檔案*/
這個選項可以禁止指定目錄之外的檔案操作,還能有效地消除本地檔案或者是遠程檔案被include()等函數的調用攻擊。
7、expose_php設為off ,這樣php不會在http檔案頭中泄露資訊。
我們為了防止駭客擷取伺服器中php版本的資訊,可以關閉該資訊斜路在http頭中 。
8、設定“allow_url_fopen”為“off” 這個選項可以禁止遠程檔案功能 。