關於包含的一個重要問題是原始碼的暴露。產生這個問題主要原因是以下的常見情況:
l 對包含檔案使用.inc的副檔名
l 包含文件保存在網站主目錄下
l Apache未設定.inc檔案的類型
l Apache的預設檔案類型是text/plain*&*
上面情況造成了可以透過URL直接存取包含檔案。更糟的是,它們會被當作普通文字處理而不會被PHP所解析,這樣你的原始碼就會顯示在使用者的瀏覽器上(見圖5-1)。
圖5-1. 原始碼在伺服器中的暴露
避免這種情況很容易。只能重組你的應用,把所有的包含文件放在網站主目錄之外就可以了,最好的方法是只把需要公開發布的文件放置在網站主目錄下。
雖然這聽起來有些瘋狂,很多情形下能導致原始碼的曝光。我曾經看過Apache的設定檔被誤寫(並且在下次啟動前未發現),沒有經驗的系統管理員升級了Apache但忘了加入PHP支持,還有一大堆情形能導致源碼暴露。
透過在網站主目錄外保存盡可能多的PHP程式碼,你可以防止原始碼的暴露。至少,把所有的包含檔案保存在網站主目錄外是一個最好的方法。
一些方法能限制源碼暴露的可能性但不能從根本上解決這個問題。這些方法包括在Apache中設定.inc檔與PHP檔一樣處理,包含檔使用.php後綴,設定Apache不能接受對.inc檔的直接請求:
<Files ~ "\.inc$"> Order allow,deny Deny from all </Files>
雖然這些方法有其優點,但沒有一個方法在安全性上能與把包含文件放在網站主目錄之外的做法相比。不要依賴上面的方法對你的應用進行保護,至多把它們當作深度防範。
以上是PHP安全-原始碼暴露的內容,更多相關內容請關注PHP中文網(www.php.cn)!