

Pitboss-NG (next gen)
A module for running untrusted code
var Pitboss = require('pitboss-ng').Pitboss;
var untrustedCode = "var a = !true;\n a";
var sandbox = new Pitboss(untrustedCode, {
memoryLimit: 32*1024,
timeout: 5*1000,
heartBeatTick: 100
});
sandbox.run({
context: {
'foo': 'bar',
'key': 'value'
},
libraries: {
myModule: path.join(__dirname, './my/own/module'),
'crypto': 'crypto',
'_': 'underscore'
}
}, function callback (err, result) {
console.log('Result is:', result);
sandbox.kill();
});
sandbox.run({
context: {},
libraries: ['console', 'lodash']
}, function callback (err, result) {
sandbox.kill();
});
Runs JS code and returns the last eval'd statement
var assert = require('chai').assert;
var Pitboss = require('pitboss-ng').Pitboss;
var code = "num = num % 5;\nnum;"
var sandbox = new Pitboss(code);
sandbox.run({context: {'num': 23}}, function (err, result) {
assert.equal(3, result);
sandbox.kill();
});
Allows you to pass you own libraries into sandboxed content
var assert = require('chai').assert;
var Pitboss = require('pitboss-ng').Pitboss;
var code = "num = num % 5;\n console.log('from sandbox: ' + num);\n num;"
var sandbox = new Pitboss(code);
sandbox.run({context: {'num': 23}, libraries: ['console']}, function (err, result) {
assert.equal(3, result);
sandbox.kill();
});
Handles processes that take too damn long
var assert = require('chai').assert;
var Pitboss = require('pitboss-ng').Pitboss;
var code = "while(true) { num % 3 };";
var sandbox = new Pitboss(code, {timeout: 2000});
sandbox.run({context: {'num': 23}}, function (err, result) {
assert.equal("Timedout", err);
sandbox.kill();
});
Doesn't choke under pressure (or shitty code)
var assert = require('chai').assert;
var Pitboss = require('pitboss-ng').Pitboss;
var code = "Not a JavaScript at all!";
var sandbox = new Pitboss(code, {timeout: 2000});
sandbox.run({context: {num: 23}}, function (err, result) {
assert.include(err, "VM Syntax Error");
assert.include(err, "Unexpected identifier");
sandbox.kill();
});
Doesn't handle this! But 'ulimit' or 'pidusage' does!
var assert = require('chai').assert;
var Pitboss = require('pitboss-ng').Pitboss;
var code = "var str = ''; while (true) { str = str + 'Memory is a finite resource!'; }";
var sandbox = new Pitboss(code, {timeout: 10000});
sandbox.run({context: {num: 23}}, function (err, result) {
assert.equal("Process failed", err);
sandbox.kill();
});
And since Pitboss-NG forks each process, ulimit kills only the runner