我想讓用戶爲我的某個應用程序創建自定義插件。節點JS中的限制範圍
我想過使用一些類似於動態庫的方法,但是使用了節點模塊。問題是不希望用戶能夠做有害的事情,如不恰當地使用網絡或訪問文件系統。
有沒有什麼辦法可以限制特定模塊的NODE Native API?
我想讓用戶爲我的某個應用程序創建自定義插件。節點JS中的限制範圍
我想過使用一些類似於動態庫的方法,但是使用了節點模塊。問題是不希望用戶能夠做有害的事情,如不恰當地使用網絡或訪問文件系統。
有沒有什麼辦法可以限制特定模塊的NODE Native API?
我真的如何做到這一點:訣竅是使用with運算符。
例如,你可以使用限制在瀏覽器中訪問一些API:
with({windows: null, document: null: XMLHttpRequest: null}){
console.log(document)
}
其中一個解決方案是重新編譯節點而不需要API調用。
實現此目的的另一種方法是在進程啓動後猴子修補不需要的調用和不需要的模塊。
> var fs = require("fs");
> fs.openSync("/etc/passwd", 0);
12
> fs.openSync = function(){}
> var fs = require("fs");
> fs.openSync("/etc/passwd", 0);
'Not allowed'
你也必須以同樣的方式require.reload
猴補丁,想一想是怎麼回事這個可以規避。
我懷疑有沒有真正的防禦,如果你授予某人代碼執行級別訪問您的服務器。最好的情況是,你會在軍備競賽中試圖堵塞發現的洞穴。
如果您希望允許客戶擴展產品的功能,那麼您應該爲客戶產品開發接口API。通過這種方式,攻擊面積有限,您可以控制應用程序的所有接入點。