2012-12-15 43 views
1

所以我正在考慮構建一個CMS,我希望它的設計使插件可以輕鬆地擴展它的功能(我正在開發一個鉤子系統和語言設置)。編寫一個有限的系統訪問的PHP插件系統

這是一個棘手的部分:我試圖爲許多網站製作一種主機(例如mycms.com/your-site),而不是單獨打包的CMS。

pages 
- id 
- slug 
- title 
- content 
- site // The site id 
sites 
- id 
- path // e.g. your-site 
- password // hash 

然後我就喜歡這家店的插件的文件結構:

我有這樣的結構設計MySQL數據庫

plugins/ 
    42/ // Site id 
    hello-world/ // plugin name 
     hello-world.php 
     functions.php 
     css/ // ... 

當然,還有一個重要的安全問題在這裏。說插件作者代碼hello-world.php像這樣:

<?php 
include '../../../core/config.inc.php'; 
echo $config['mysql']['password']; // Now they have my server's database password! 
?> 

我該如何繞過這樣的事情?我如何控制它,以便hello-world.php只能訪問目錄hello-world /中的文件,並且沒有任何文件在上面?基本上,我想禁止插件訪問他們自己目錄之外的文件。

這一定很簡單吧?

謝謝!

+0

你會直接控制服務器上的代碼嗎? – Charles

+0

我還不完全確定。如果您有解決方案,請務必提出建議,我會研究它。 –

回答

0

請考慮這個插件最終會在cms進程中運行,所以惡意的插件autor甚至可以在進程全局範圍內抓取數據。您的cms很可能會在某些時候包含config.php,這意味着這些設置現在處於全局範圍內,並且可以通過任何代碼讀取。您可以通過將設置存儲在函數中來避免這種情況。您可以通過詢問函數的返回值來訪問這些設置,並在函數調用中創建一些鎖定機制。