如何启动另一个NodeJS应用程序(作为子进程)并限制某些NodeJS API文件(例如,不允许NodeJS进程访问<input type="text" name="expectedClosedDate" class="form-control width-160 float-left" uib-datepicker-popup="{{expectedClosedDate.format}}" min-date="minDate" ng-model="ideaDetail.Idea.ExpectedCloseDate" datepicker-options="expectedClosedDate.dateOptions" close-text="Close" is-open="expectedClosedDate.isOpened" disabled date-disabled="expectedClosedDate.disabled(date, mode)" />
<span class="addon-brit input-group-addon mouse-hand float-left" ng-click="expectedClosedDate.open()" style="width:50px;line-height: 1.68">
<span class="glyphicon glyphicon-calendar"></span>
</span>
)。
另外,如果这是可能的并且我要限制对require('fs')
的访问,那么用户是否可以通过其他任何方式访问文件系统? (忽略通过命令行)
答案 0 :(得分:3)
简短回答:你不能。
require
是一个全局函数,您可以在文件范围内重新定义:
require = function(module) { return null; };
// OR
global.require = function(module) { return null; };
此更改是您修改的文件的本地更改,因此您无法使用此文件启动child_process
来“准备”环境。
另一个想法是弄乱require
缓存。 console.log
ging require
变量,您可以看到它存储了所需文件的缓存。您可以简单地require
要私有的所有模块,并使用其他对象或空对象替换(不删除)它们在缓存中。
遗憾的是......如果您的用户知道require
如何工作,他基本上可以清除require
缓存并再次要求文件,使该解决方案无法实现。
潜在的解决方案可能是强制用户使用包裹require
的函数:
var myRequire = function(moduleName) {
// Validate or refuse requiring depending on the `moduleName` value
...
else
return require(moduleName);
};
首先检查用户是否使用全局require
函数(可能通过自定义JS解析器或其他东西?)。
希望它有所帮助!