PHP安全-源碼暴露
關(guān)于包含的一個重要問題是源代碼的暴露。產(chǎn)生這個問題主要原因是下面的常見情況:
l對包含文件使用.inc的擴展名
l包含文件保存在網(wǎng)站主目錄下
lApache未設(shè)定.inc文件的類型
lApache的默認文件類型是text/plain
上面情況造成了可以通過URL直接訪問包含文件。更糟的是,它們會被作為普通文本處理而不會被PHP所解析,這樣你的源代碼就會顯示在用戶的瀏覽器上(見圖5-1)。
圖 5-1. 源代碼在服務(wù)器中的暴露
避免這種情況很容易。只能重組你的應(yīng)用,把所有的包含文件放在網(wǎng)站主目錄之外就可以了,最好的方法是只把需要公開發(fā)布的文件放置在網(wǎng)站主目錄下。
雖然這聽起來有些瘋狂,很多情形下能導(dǎo)致源碼的暴露。我曾經(jīng)看到過Apache的配置文件被誤寫(并且在下次啟動前未發(fā)現(xiàn)),沒有經(jīng)驗的系統(tǒng)管理員升級了Apache但忘了加入PHP支持,還有一大堆情形能導(dǎo)致源碼暴露。
通過在網(wǎng)站主目錄外保存盡可能多的PHP代碼,你可以防止源代碼的暴露。至少,把所有的包含文件保存在網(wǎng)站主目錄外是一個最好的辦法。
一些方法能限制源碼暴露的可能性但不能從根本上解決這個問題。這些方法包括在Apache中配置.inc文件與PHP文件一樣處理,包含文件使用.php后綴,配置Apache不能接受對.inc文件的直接請求:
<Files ~ '.inc$'>
Order allow,deny
Deny from all
</Files>
雖然這些方法有其優(yōu)點,但沒有一個方法在安全性上能與把包含文件放在網(wǎng)站主目錄之外的做法相比。不要依賴于上面的方法對你的應(yīng)用進行保護,至多把它們當做深度防范來對待。
相關(guān)文章:
