2015-12-09 34 views
3

如何啓動另一個NodeJS應用程序(作爲子進程)並限制某些NodeJS API文件(例如,不允許該NodeJS進程訪問require('fs'))。使用NodeJS API限制啓動另一個節點文件

此外,如果這是可能的,我想限制訪問require('fs')會有任何其他方式的用戶可以訪問文件系統? (不考慮通過命令行)

回答

3

簡答:你不能。


require是一個全球性的功能,可以在文件的範圍重新定義:

require = function(module) { return null; }; 
// OR 
global.require = function(module) { return null; }; 

這種變化是本地所做的修改文件,所以你無法啓動child_process用這個文件來「準備」環境。

另一個想法是混亂require緩存。 console.log變爲require變量,可以看到它存儲了所需文件的緩存。您可以簡單地將require所有您想要私有的模塊替換(不刪除)它們與緩存中的其他對象或空對象。 不幸的是......如果你的用戶知道require是如何工作的,他基本上可以清除require緩存並再次需要這些文件,這樣就不可能解決這個問題。


一個潛在的解決辦法是強制用戶使用的功能包裝require

var myRequire = function(moduleName) { 
    // Validate or refuse requiring depending on the `moduleName` value 
    ... 
    else 
    return require(moduleName); 
}; 

,並檢查第一通過自定義JS也許用戶不使用全局require功能(解析器還是什麼?)。

希望它有幫助!

+1

完美答案!我將強制用戶使用自定義函數來使用模塊。謝謝! –

相關問題