PHP安全-源碼暴露
關(guān)于包含的一個重要問題是源代碼的暴露。產(chǎn)生這個問題主要原因是下面的常見情況:
l對包含文件使用.inc的擴(kuò)展名
l包含文件保存在網(wǎng)站主目錄下
lApache未設(shè)定.inc文件的類型
lApache的默認(rèn)文件類型是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)驗(yàn)的系統(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)點(diǎn),但沒有一個方法在安全性上能與把包含文件放在網(wǎng)站主目錄之外的做法相比。不要依賴于上面的方法對你的應(yīng)用進(jìn)行保護(hù),至多把它們當(dāng)做深度防范來對待。
相關(guān)文章:
1. Python的文本常量與字符串模板之string庫2. SpringBoot+TestNG單元測試的實(shí)現(xiàn)3. 利用CSS制作3D動畫4. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程5. jsp+servlet簡單實(shí)現(xiàn)上傳文件功能(保存目錄改進(jìn))6. Springboot 全局日期格式化處理的實(shí)現(xiàn)7. Java GZip 基于內(nèi)存實(shí)現(xiàn)壓縮和解壓的方法8. 完美解決vue 中多個echarts圖表自適應(yīng)的問題9. 存儲于xml中需要的HTML轉(zhuǎn)義代碼10. JAMon(Java Application Monitor)備忘記
