怎樣做到讓插件不能訪問插件以外的目錄
假如我安裝了一個(gè)插件,這個(gè)插件在某個(gè)方法里寫上了
$path = './plugin';
$files = scandir($path);
var_dump( $files);
這樣它就能把整個(gè)plugin目錄的文件列出來了,除了它自身以外還有別的插件,如我foo插件是zhangsan寫的,bar插件是lisi寫的,該如何做到zhangsan和lisi寫的插件隔離呢,即zhangsan無法去讀取plugin/bar下的內(nèi)容,lisi無法去讀取plugin/foo下的內(nèi)容
做不到,除非你 hook
各種 PHP
的內(nèi)置函數(shù)。不然執(zhí)行一下 shell_exec
或者 exec
函數(shù),只要 webman
的運(yùn)行用戶有權(quán)限的東西都能獲取到。
所以說webman在框架底層沒有辦法通過技術(shù)手段讓某個(gè)插件以安全方式運(yùn)行嗎?php是可以通過php.ini來配置網(wǎng)站目錄下的php不能訪問網(wǎng)站根目錄以外的內(nèi)容的,webman能做到讓插件不能訪問插件根目錄以外的內(nèi)容嗎?
目前node沒有做到限制node_modules目錄下的某個(gè)包的權(quán)限,但是deno做到了,應(yīng)該不是技術(shù)上做的到做不到而是框架的作者想不想這么做吧?
你說的是 php.ini
的 open_basedir
配置項(xiàng)吧,這個(gè)主要是針對(duì)當(dāng)前網(wǎng)站整個(gè)應(yīng)用的,而你需要的是限制應(yīng)用內(nèi)的某個(gè)目錄,這個(gè)我認(rèn)為用啥 PHP
框架都做不到。你可以嘗試設(shè)置一下 open_basedir
看看。
http://wtbis.cn/doc/webman/others/task.html#%E6%96%B0%E5%A2%9EHTTP%E7%AB%AF%E5%8F%A3
感覺文檔的這個(gè)新開HTTP端口的方案可行。
不同的插件運(yùn)行在不同的進(jìn)程,給進(jìn)程設(shè)置特定用戶,這樣應(yīng)該可以。
如果插件具備了對(duì)上層文件夾的訪問權(quán)限,也就以意味著可以讀取當(dāng)前網(wǎng)站根目錄下config/database.php的權(quán)限,也就意味著可以操作整個(gè)數(shù)據(jù)庫,也可以查看其他插件或根目錄app/下的所有源碼,萬一哪個(gè)插件的作者動(dòng)了點(diǎn)小心思,那么就變成了你花錢買了他的插件,他卻拿到了你整個(gè)項(xiàng)目的源碼和數(shù)據(jù)庫,所以要是能有辦法在框架上限制讓插件在讀取硬盤的能力上僅限于插件自身根目錄,讀取數(shù)據(jù)庫能力上僅限于以插件標(biāo)識(shí)符為前綴的表就好了