PHP環境安全加固方案

2021-08-22 14:57:02 字數 3352 閱讀 9824

php應用部署後,開發者或者運維人員應該時刻關注php方面的漏洞訊息,公升級php版本,對php環境進行安全加固。本文將給大家介紹如何從web安全方面讓你的**更堅固更安全。

1.啟用 php 的安全模式

php 環境提供的安全模式是乙個非常重要的內嵌安全機制,php 安全模式能有效控制一些 php 環境中的函式(例如system()函式),對大部分的檔案操作函式進行許可權控制,同時不允許對某些關鍵檔案進行修改(例如 /etc/passwd)。但是,預設的 php.ini 配置檔案並沒有啟用安全模式。

您可以通過修改 php.ini 配置檔案啟用 php 安全模式:

safe_mode = on
2.使用者組安全

當您啟用安全模式後,如果safe_mode_gid選項被關閉,php 指令碼能夠對檔案進行訪問,且相同使用者組的使用者也能夠對該檔案進行訪問。

因此,建議您將該選項設定為關閉狀態:

safe_mode_gid = off
注意: 該選項引數僅適用於 linux 作業系統。

如果不進行該設定,您可能無法對伺服器**目錄下的檔案進行操作。

3.安全模式下執行程式主目錄

如果啟用了安全模式後,想要執行某些程式的時候,可以指定需要執行程式的主目錄,例如:

safe_mode_exec_dir = /usr/bin
一般情況下,如果不需要執行什麼程式,建議您不要指定執行系統程式的目錄。您可以指定乙個目錄,然後把需要執行的程式拷貝到這個目錄即可,例如:

safe_mode_exec_dir = /temp/cmd
safe_mode_exec_dir = /usr/www
注意:執行目錄的路徑以您實際作業系統目錄路徑為準。

4.安全模式下包含檔案

如果您需要在安全模式下包含某些公共檔案,您只需要修改以下選項即可:

safe_mode_include_dir = /usr/www/include/
一般情況下,php 指令碼中包含的檔案都是在程式已經寫好的,可以根據您的具體需要進行設定。

5.控制 php 指令碼能訪問的目錄

使用open_basedir選項能夠控制 php 指令碼只能訪問指定的目錄,這樣能夠避免 php 指令碼訪問不應該訪問的檔案,一定程度下降低了 phpshell 的危害。一般情況下,可以設定為只能訪問**目錄:

open_basedir = /usr/www
6.關閉危險函式

如果您啟用了安全模式,那麼可以不需要設定函式禁止,但為了安全考慮,還是建議您進行相關設定。例如,您不希望執行包括system()等在內的執行命令的 php 函式,以及能夠檢視 php 資訊的phpinfo()等函式,那麼您可以通過以下設定禁止這些函式:

disable_functions = system, passthru, exec, shell_exec, popen, phpinfo, escapeshellarg, escapeshellcmd, proc_close, proc_open, dl
如果您想要禁止對於任何檔案和目錄的操作,那麼您可以關閉以下檔案相關操作。

disable_functions = chdir, chroot, dir, getcwd, opendir, readdir, scandir, fopen, unlink, delete, copy, mkdir, rmdir, rename, file, file_get_contents, fputs, fwrite, chgrp,chmod, chown
注意: 以上設定中只列舉了部分比較常用的檔案處理函式,您也可以將上面的執行命令函式和這些檔案處理函式相結合,就能給抵制大部分的 phpshell 威脅。

7.關閉 php 版本資訊在 http 頭中的洩露

為了防止黑客獲取伺服器中 php 版本的資訊,您可以禁止該資訊在 http 頭部內容中洩露:

expose_php = off
這樣設定之後,黑客在執行telnet 80嘗試連線您的伺服器的時候,將無法看到 php 的版本資訊。

8.關閉註冊全域性變數

在 php 環境中提交的變數,包括使用 post 或者 get 命令提交的變數,都將自動註冊為全域性變數,能夠被直接訪問。這對您的伺服器是非常不安全的,因此建議您將註冊全域性變數的選項關閉,禁止將所提交的變數註冊為全域性變數。

register_globals = off
注意: 該選項引數在 php 5.3 以後的版本中已被移除。

當然,如果這樣設定之後,獲取對應變數的時候就需要採取合理方式。例如,獲取 get 命令提交的變數 var,就需要使用$_get['var']命令來進行獲取,在進行 php 程式設計時需要注意。

9.sql 注入防護

sql 注入是乙個非常危險的問題,小則造成**後台被入侵,重則導致整個伺服器淪陷。

magic_quotes_gpc選項預設是關閉的。如果開啟該選項,php 將自動把使用者提交對 sql 查詢的請求進行轉換(例如,把 』 轉換為 \』 等),這對於防止 sql 注入攻擊有很大作用,因此建議您將該選項設定為:

magic_quotes_gpc = on
注意: 該選項引數在 php 5.4.0 以後的版本中已被移除。

所以最好使用pdo預處理方式處理sql查詢。

10.錯誤資訊控制

display_errors = off
如果您確實要顯示錯誤資訊,一定要設定顯示錯誤資訊的級別。例如,只顯示警告以上的錯誤資訊:

error_reporting = e_warning & e_error
注意: 強烈建議您關閉錯誤提示資訊。

11.錯誤日誌

建議您在關閉錯誤提示資訊後,對於錯誤資訊進行記錄,便於排查伺服器執行異常的原因:

log_errors = on
同時,需要設定錯誤日誌存放的目錄,建議您將 php 錯誤日誌與 apache 的日誌存放在同一目錄下:

error_log = /usr/local/apache2/logs/php_error.log
注意: 該檔案必須設定允許 apache 使用者或使用者組具有寫的許可權。

PHP安全的DedeCms安全加固

安全從來都是伺服器配置 檔案許可權控制和 程式三者的相互配合,今天主要看看如果對dedecms 程式的改進來提高安全性。可執行的檔案不允許被修改,可寫檔案不允許被訪問 這是 許可權控制的根本原則,程式在 可寫檔案不允許被訪問 方面可做許多任務作。就拿dedecms來說,我們可以在如下幾個方式做好保護...

從PHP安全講DedeCms的安全加固

dedecms做為國內使用最為廣泛使用人數最多的cms之一,經常爆出漏洞,每個漏洞的爆出,影響都是一大片,輕則被人掛廣告 彈框,重則伺服器成為肉機,寶貴資料丟失。那麼有什麼辦法可以提高dedecms的安全性呢?先來看看原因吧,為什麼php程式經常出漏洞,其實是由php程式本身決定的。php可復用性低...

從PHP安全講DedeCms的安全加固

dedecms做為國內使用最為廣泛使用人數最多的cms之一,經常爆出漏洞,每個漏洞的爆出,影響都是一大片,輕則被人掛廣告 彈框,重則伺服器成為肉機,寶貴資料丟失。那麼有什麼辦法可以提高dedecms的安全性呢?先來看看原因吧,為什麼php程式經常出漏洞,其實是由php程式本身決定的。php可復用性低...