重要資訊
某些基於 CGI 的 PHP 設定存在一個嚴重的漏洞,這個漏洞至少八年來都沒有被發現。
對於 PHP 來說,這意味著一個包含 ?-s 的請求可能會洩露頁面的 PHP 原始碼。
請務必更新到最新版本和/或使用 .htaccess 修補程式,兩者都可以在這裡找到
PHP 5.3.12 和 PHP 5.4.2 已發布
https://php.dev.org.tw/archive/2012.php#id2012-05-03-1
重要資訊
某些基於 CGI 的 PHP 設定存在一個嚴重的漏洞,這個漏洞至少八年來都沒有被發現。
對於 PHP 來說,這意味著一個包含 ?-s 的請求可能會洩露頁面的 PHP 原始碼。
請務必更新到最新版本和/或使用 .htaccess 修補程式,兩者都可以在這裡找到
PHP 5.3.12 和 PHP 5.4.2 已發布
https://php.dev.org.tw/archive/2012.php#id2012-05-03-1
更好的方法是使用 binfmt_misc:(僅限 Linux)
echo :php3:E::php3::/usr/bin/php: > /proc/sys/fs/binfmt_misc/register
這樣就無需在檔案頂部使用 #! 了。
若要搭配 suexec 使用 php-cgi,最好每個虛擬主機都有自己的 php.ini。 可以用以下方式設定:
SetEnv PHPRC /var/www/server/www.test.com/conf
但是 suexec 會清除這個環境變數,因為它不知道這是「安全的」,所以您必須編輯 suexec.c 進行編譯....
如果您每個 cgi 都使用 php,並且啟用了 mod_gzip,則必須為 php cgi 二進制檔案停用 mod_gzip 才能使用 --enable-cgi-redirect。 mod_gzip 會將 REDIRECT_STATUS 永遠設定為 200,這使得 php 二進制檔案無法知道它是被直接呼叫還是被重定向呼叫。
如果您重視安全性,最好設定
register_globals = off
enable_track_vars = on (從 PHP4.0.3 開始永遠開啟)
變數順序的預設設定為
EGPCS
(環境變數/GET 變數/POST 變數/COOKIE 變數/SESSION 變數)
想像一下,如果您依賴環境變數,但它被 GET/POST/COOKIE 變數覆蓋了會怎樣?
出現「未指定輸入檔案」(又稱「世界上第二有用的錯誤訊息」)的最常見原因之一是您將 php.ini 中的「doc_root」設定為與 Apache 設定中定義的「DocumentRoot」不同的值。
其他網路伺服器也是如此。 例如,在 lighttpd 上,請確保「server.document-root」值與 php.ini 中定義的「doc_root」相同。
我已經建立了一個指南,說明如何使用 SuEXEC 安裝 PHP,這樣就不需要使用 shebangs (!#/usr/bin/php4)。 希望這對您有所幫助。
http://www.pookey.co.uk/php-security.xml
如果您想使用 suexec 並透過 #!/usr/local/bin/php 引用您的 php 直譯器,請務必在編譯 php 時不要使用 --enable-force-cgi-redirect。
這看起來可能很明顯,但我花了兩天才弄明白 :-(
回覆 grange at club-internet dot fr
給出的 mod_rewrite 指令中有幾個錯誤。 我發現以下方法有效
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^cgi-bin/php.cgi - [F]
我從 RewriteCond 中刪除了 =,並從 RewriteRule 中刪除了開頭的 /。
注意:以 CGI 程式方式執行 PHP 會改變 $_SERVER['SCRIPT_NAME'] 的值。當透過 (正常的) mod_PHP 機制執行時,它會被設定為正在執行的 PHP 指令碼的名稱(實際上是路徑)。當透過 CGI 執行時,它會指向 CGI 執行檔的路徑。
suxec 的替代方案是 suphp (http://www.suphp.org)。
「suPHP 是一個以其所有者的權限執行 PHP 指令碼的工具。它由一個 Apache 模組 (mod_suphp) 和一個 setuid root 執行檔 (suphp) 組成,Apache 模組會呼叫該執行檔來更改執行 PHP 直譯器的程序的 uid。」(來自網站)
suEXEC 需要 CGI 模式,並且會降低指令碼的執行速度。我是這樣做的
1. 以 DSO 模式安裝 php。(為了最大速度和低安全性)
2. 使用 --enable-force-cgi-redirect 進行單獨的 CGI 安裝,將 php 放置到 cgi-bin 中
3. 為了使用 suEXEC 獲得更高的安全性,請選擇以下方法之一
3-1:放置一個包含以下內容的 .htaccess 檔案以覆寫主要設定
AddType application/x-httpd-wphp php
Action application/x-httpd-wphp /cgi-bin/php
子目錄中的所有 php 檔案都將受到保護。
3-2:在 httpd.conf 中新增以下內容
AddType application/x-httpd-wphp sphp
Action application/x-httpd-wphp /cgi-bin/php
然後每個敏感的 php 檔案都應重新命名為 .sphp
在 httpd.conf 中的每個虛擬主機指令中新增「php_value doc_root /home/user/html_docs」