可能受到的攻擊
如果不想把 PHP 嵌入到服務(wù)器端軟件(如 Apache)作為一個模塊安裝的話,可以選擇以
CGI 的模式安裝?;蛘甙?PHP 用于不同的 CGI
封裝以便為代碼創(chuàng)建安全的 chroot 和 setuid 環(huán)境。這種安裝方式通常會把
PHP 的可執(zhí)行文件安裝到 web 服務(wù)器的 cgi-bin
目錄。CERT 建議書 ? CA-96.11
建議不要把任何的解釋器放到 cgi-bin 目錄。盡管 PHP
可以作為一個獨立的解釋器,但是它的設(shè)計使它可以防止下面類型的攻擊:
-
訪問系統(tǒng)文件:http://my.host/cgi-bin/php?/etc/passwd
在 URL 請求的問號(?)后面的信息會傳給 CGI
接口作為命名行的參數(shù)。其它的解釋器會在命令行中打開并執(zhí)行第一個參數(shù)所指定的文件。
但是,以 CGI 模式安裝的 PHP 解釋器被調(diào)用時,它會拒絕解釋這些參數(shù)。
-
訪問服務(wù)器上的任意目錄:http://my.host/cgi-bin/php/secret/doc.html
好像上面這種情況,PHP 解釋器所在目錄后面的 URL 信息
/secret/doc.html 將會例行地傳給
CGI 程序并進行解釋。通常一些 web
服務(wù)器的會將它重定向到頁面,如
http://my.host/secret/script.php。如果是這樣的話,某些服務(wù)器會先檢查用戶訪問
/secret 目錄的權(quán)限,然后才會創(chuàng)建
http://my.host/cgi-bin/php/secret/script.php
上的頁面重定向。不幸的是,很多服務(wù)器并沒有檢查用戶訪問
/secret/script.php 的權(quán)限,只檢查了
/cgi-bin/php 的權(quán)限,這樣任何能訪問
/cgi-bin/php 的用戶就可以訪問
web 目錄下的任意文件了。
在 PHP 里,運行時配置指令
cgi.force_redirect、
doc_root 和
user_dir
都可以為服務(wù)器上的文件和目錄添加限制,用于防止這類攻擊。下面將對各個選項的設(shè)置進行詳細講解。