將 PHP 作為 CGI 執行檔是一種選項,適用於由於某些原因不想將 PHP 作為模組整合到伺服器軟體(如 Apache)中的設定,或者將 PHP 與不同種類的 CGI 包裝器一起使用,以便為腳本建立安全的 chroot 和 setuid 環境。這種設定通常涉及將可執行的 php 執行檔安裝到網路伺服器的 cgi-bin 目錄中。CERT 諮詢報告 » CA-96.11 建議不要將任何直譯器放置在 cgi-bin 中。即使 php 執行檔可以用作獨立的直譯器,PHP 的設計也能防止這種設定可能造成的攻擊。
?
) 後面的查詢資訊會透過 CGI 介面以命令列引數的形式傳遞給直譯器。直譯器通常會開啟並執行命令列中指定為第一個引數的檔案。 當以 CGI 執行檔方式呼叫時,php 會拒絕解譯命令列引數。Action
)將對文件(例如 http://my.host/secret/script.php)的請求重新導向至 PHP 直譯器。透過此設定,網頁伺服器會先檢查目錄 /secret 的存取權限,然後再建立重新導向的請求 http://my.host/cgi-bin/php/secret/script.php。遺憾的是,如果請求最初是以這種形式給出的,網頁伺服器就不會對檔案 /secret/script.php 進行存取檢查,而只會對 /cgi-bin/php 檔案進行檢查。如此一來,任何能夠存取 /cgi-bin/php 的使用者都能夠存取網頁伺服器上任何受保護的文件。 在 PHP 中,如果伺服器文件樹狀結構中有任何具有存取限制的目錄,則可以使用執行階段設定指令 cgi.force_redirect、doc_root 和 user_dir 來防止這種攻擊。不同組合的完整說明請見下文。