PHP安全-源碼暴露
關(guān)于包含的一個(gè)重要問題是源代碼的暴露。產(chǎn)生這個(gè)問題主要原因是下面的常見情況:
l對(duì)包含文件使用.inc的擴(kuò)展名
l包含文件保存在網(wǎng)站主目錄下
lApache未設(shè)定.inc文件的類型
lApache的默認(rèn)文件類型是text/plain
上面情況造成了可以通過URL直接訪問包含文件。更糟的是,它們會(huì)被作為普通文本處理而不會(huì)被PHP所解析,這樣你的源代碼就會(huì)顯示在用戶的瀏覽器上(見圖5-1)。
圖 5-1. 源代碼在服務(wù)器中的暴露
避免這種情況很容易。只能重組你的應(yīng)用,把所有的包含文件放在網(wǎng)站主目錄之外就可以了,最好的方法是只把需要公開發(fā)布的文件放置在網(wǎng)站主目錄下。
雖然這聽起來有些瘋狂,很多情形下能導(dǎo)致源碼的暴露。我曾經(jīng)看到過Apache的配置文件被誤寫(并且在下次啟動(dòng)前未發(fā)現(xiàn)),沒有經(jīng)驗(yàn)的系統(tǒng)管理員升級(jí)了Apache但忘了加入PHP支持,還有一大堆情形能導(dǎo)致源碼暴露。
通過在網(wǎng)站主目錄外保存盡可能多的PHP代碼,你可以防止源代碼的暴露。至少,把所有的包含文件保存在網(wǎng)站主目錄外是一個(gè)最好的辦法。
一些方法能限制源碼暴露的可能性但不能從根本上解決這個(gè)問題。這些方法包括在Apache中配置.inc文件與PHP文件一樣處理,包含文件使用.php后綴,配置Apache不能接受對(duì).inc文件的直接請(qǐng)求:
<Files ~ '.inc$'>
Order allow,deny
Deny from all
</Files>
雖然這些方法有其優(yōu)點(diǎn),但沒有一個(gè)方法在安全性上能與把包含文件放在網(wǎng)站主目錄之外的做法相比。不要依賴于上面的方法對(duì)你的應(yīng)用進(jìn)行保護(hù),至多把它們當(dāng)做深度防范來對(duì)待。
相關(guān)文章:
1. .Net Core和RabbitMQ限制循環(huán)消費(fèi)的方法2. jsp網(wǎng)頁實(shí)現(xiàn)貪吃蛇小游戲3. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說明4. ASP.NET MVC遍歷驗(yàn)證ModelState的錯(cuò)誤信息5. 用css截取字符的幾種方法詳解(css排版隱藏溢出文本)6. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向7. asp中response.write("中文")或者js中文亂碼問題8. PHP設(shè)計(jì)模式中工廠模式深入詳解9. CSS hack用法案例詳解10. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法
