Apache-2.2

保護 PHP 的 exec 和其他人

  • July 11, 2019

我目前正在設置託管服務,目前我非常擔心安全性。這是我的情況:

我已經設置了多個 apache 的虛擬主機,出於明顯的安全原因,我不想讓使用者通過 php 的系統功能四處移動來訪問其他人的數據。

這就是我在每個虛擬主機中設置 open_basedir 的原因。儘管如此,我仍然擔心一個主要的安全漏洞:exec 函式。

因此,經過一番研究,我發現您可以使用 php.ini 中的 disable_functions 來禁用某些功能,就像他的名字告訴我們的那樣。我已經找到了這個功能列表來禁用誰接縫非常完整:

disable_functions = "apache_child_terminate, apache_setenv, define_syslog_variables, 
escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, 
ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, 
ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, php_uname, 
phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, 
posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, 
posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, 
proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode"

但是,我對為我的使用者限制php感覺不對。所以,兩個問題:

  • 您認為對於大多數 CMS 和其他 Web 應用程序來說,這是一個龐大的情況嗎?
  • 如果是這樣,是否有其他方法來隔離每個虛擬主機數據?

PS:我已經尋找 suexec 和其他的,但我認為它們不適合因為我在我的伺服器上 expeting 100 到 200 個使用者,我不想為每個使用者創建和管理一個系統帳戶。

在虛擬主機行業,尤其是在共享主機環境中,出於安全原因禁用某些 php 功能是很常見的。以下是被阻止的最常見的 php 函式:

exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

此外,最好為每個網站分別管理使用者,因為如果伺服器出現任何問題,您可以輕鬆辨識誰做錯了。

為此,您可以使用 SuPHP: http ://www.techtrunch.com/installations/compile-apache-suphp-ubuntu http://www.inmotionhosting.com/support/website/general-server-setup/what-is- suphp

您也可以在 php.ini 中考慮以下值,以使您的伺服器更安全:

  1. allow_url_fopen- 禁用通過 URL 打開文件的功能
  2. session.save_path- 設置路徑是 php 儲存其會話文件
  3. open_basedir- 設置允許 php 腳本打開文件的路徑

引用自:https://serverfault.com/questions/462470