我正在尝试沙盒MVEL表达式评估。不幸的是,默认情况下,MVEL包含表达式语言中的所有java.lang。*类,因此用户可以调用“Runtime.exit()”并终止整个系统。
如何排除我没有使用addImport()显式添加的所有类?
我无法做出VariableResolvers的正面或反面。
答案 0 :(得分:3)
据我所知,这不受支持。
前段时间我在公司的一个项目上面临这种需求。我们必须更改MVEL以介绍一种配置自定义策略以控制对类型和方法的访问的方法。 问题是您还可以通过其完全限定名称访问任何类,因此不仅仅是删除默认导入的问题。 不幸的是,我没有代码使其可用。
答案 1 :(得分:1)
var chai = require('chai');
var sinonChai = require("sinon-chai");
var expect = chai.expect;
var extend = require('lodash').extend;
var sinon = require('sinon');
chai.use(sinonChai);
var proxyquire = require('proxyquire');
describe("getProtocol", function () {
var testedModule, parseSpy, path;
before(function () {
path = "http://www.some.com/test";
parseSpy = sinon.spy();
testedModule = proxyquire('../getProtocol.js', {
'url': {
'parse': parseSpy
}
});
testedModule.getProtocol(path);
});
it("calls url.parse", function () {
expect(parseSpy).has.been.calledOnce.and.calledWithExactly(path, true);
});
});
答案 2 :(得分:0)
您是否尝试使用AspectJ来限制来自MVEL的这些调用?