0.1.2 • Published 7 years ago

module-cop v0.1.2

Weekly downloads
-
License
MIT
Repository
-
Last release
7 years ago

Node Module Cop

Project Url: https://github.com/rorymurphy/module-cop

About

When building an application that allows any code to be executed that comes from an untrusted source (e.g. a plugin, or user code submitted by a user), it becomes a difficult problem to limit the set of things that the untrusted code can do. Luckily, to do almost anything in JavaScript a module must be loaded via require statement. Node Module Cop takes advantage of this to enable code sandboxing by controlling which modules it is allowed to load. The set of modules permissible to load can be controlled through whitelist/blacklist and, additionally, substitutions can be specified to return an alternate object when a given module is required.

vs. Other Solutions

The distinguishing factor of Node Module Cop is its unobtrusiveness. Where other solutions are implemented in ways that make them incompatible with other plugins that hook into the Module loading system, Node Module Cop maintains compatibility.

Usage

Using Node Module Cop is a breeze - simply create your cop, configure the whitelist and/or blacklist, and call enforce passing in the code block you want sandboxed.

import {ModuleCop, EnforcementLevel} from 'module-cop';

var cop = new ModuleCop();
cop.enforcementLevel = EnforcementLevel.WHITELIST_ONLY;
cop.addToWhitelist('events');
cop.enforce( () => require('untrusted.js'));

Properties

NameTypeDescription
enforcementLevelint (enumerated by EnforcementLevel)Determines the method of enforcement:
WHITELIST_ONLY: Strictly limits module loading to those specified in the whitelist, ignoring the blacklist
BLACKLIST_ONLY: Allows loading of any module except those specified on the blacklist, ignoring the whitelist
WHITELIST_PRECEDENCE: Blocks all modules on the blacklist, unless referenced by a whitelisted module. This is useful when you want to permit a module that internally requires access to a lower-level sensitive module (e.g. the 'fs' module).
whitelistArray of stringsA read-only view into the current items on the whitelist
blacklistArray of stringsA read-only view into the current items on the blacklist
substitutionsObjectA read-only key-value map representing any module substitutions

Methods

NameArgumentsDescription
addToBlacklistmoduleNameAdds a module to the blacklist.
removeFromBlacklistmoduleNameRemoves a module from the blacklist.
addToWhitelistmoduleNameAdds a module to the whitelist
removeFromWhitelistmoduleNameRemoves a module from the whitelist
addModuleSubstitutionmoduleName, substituteAdds a module to the set of substitutions
removeModuleSubstitutionmoduleNameRemoves a module from the set of substitutions
enforcecallbackEnforces the rules defined for the Module Cop instance for the block of code passed in through the callback argument