개체모래상자
독립적인 실행 공간을 관리하는 데 사용되는 격리된 샌드박스 개체
모든 코드는 자체 샌드박스에서 실행되며 전역 요구는 현재 샌드박스를 호출하여 모듈을 로드하고 샌드박스는 요구를 통해 로드된 샌드박스로 전달됩니다. 다음 예에서는 전역 기본 모듈에만 액세스를 제한하는 샌드박스를 만듭니다.assert모듈을 선택하고 두 개의 사용자 정의 모듈 a와 b를 추가합니다.
1
2
3
4
5
6
7
8var vm = require('vm');
var sbox = new vm.SandBox({
a: 100,
b: 200,
assert: require('assert')
});
var mod_in_sbox = sbox.require('./path/to/mod');
샌드박스는 공격 방지 보안 샌드박스가 아니며, 서로 다른 코드를 격리하고 상호 간섭을 피하기 위해 사용할 수 있는 독립적인 실행 공간일 뿐 악성 코드를 예방할 수는 없습니다.
상속관계
건설자
SandBox
새로운 격리 샌드박스 객체를 생성하고 기본 모듈을 초기화합니다.
1new SandBox(Object mods = {});
호출 매개변수:
- mods: Object, 추가할 모듈 객체 사전을 지정합니다.
새로운 격리 샌드박스 객체를 생성하고 기본 모듈을 초기화합니다.
1
2new SandBox(Object mods,
Function require);
호출 매개변수:
- mods: Object, 추가할 모듈 객체 사전을 지정합니다.
- require: 함수, 사용자 정의 require 함수 모듈이 존재하지 않는 경우 반환 없이 사용자 정의 함수를 먼저 호출한 후 파일에서 로드합니다.
새로운 독립적인 전역 격리 샌드박스 객체를 생성하고 기본 모듈을 초기화합니다.
1
2new SandBox(Object mods,
Object global);
호출 매개변수:
- mods: Object, 추가할 모듈 객체 사전을 지정합니다.
- global: 객체, 초기화된 전역 속성을 지정합니다.
새로운 독립적인 전역 격리 샌드박스 객체를 생성하고 기본 모듈을 초기화합니다.
1
2
3new SandBox(Object mods,
Function require,
Object global);
호출 매개변수:
- mods: Object, 추가할 모듈 객체 사전을 지정합니다.
- require: 함수, 사용자 정의 require 함수 모듈이 존재하지 않는 경우 반환 없이 사용자 정의 함수를 먼저 호출한 후 파일에서 로드합니다.
- global: 객체, 초기화된 전역 속성을 지정합니다.
구성원 속성
global
개체, 쿼리 샌드박스global물체
1readonly Object SandBox.global;
modules
객체, 샌드박스에 있는 모든 기존 모듈의 사전 객체를 쿼리합니다.
1readonly Object SandBox.modules;
멤버 함수
addBuiltinModules
샌드박스에 내장 기본 모듈 추가
1SandBox.addBuiltinModules();
add
샌드박스에 기본 모듈 추가
1
2SandBox.add(String id,
Value mod);
호출 매개변수:
- id: String, 추가할 모듈의 이름을 지정합니다. 이 경로는 현재 실행 중인 스크립트와 관련이 없으며 절대 경로 또는 모듈 이름이어야 합니다.
- mod: 값, 추가할 모듈 개체를 지정합니다.
샌드박스에 기본 모듈 세트 추가
1SandBox.add(Object mods);
호출 매개변수:
- mods: Object, 추가할 모듈 객체 사전을 지정합니다. 추가된 javascript 모듈은 샌드박스 수정 객체 간의 상호 간섭을 피하기 위해 복사본을 생성합니다.
addScript
샌드박스에 스크립트 모듈 추가
1
2Value SandBox.addScript(String srcname,
Buffer script);
호출 매개변수:
- srcname: 문자열, 추가할 스크립트의 이름을 지정합니다. srcname에는 다음과 같은 확장자가 포함되어야 합니다.json아니면 js, jsc
- script:Buffer, 추가할 바이너리 코드를 지정합니다.
결과 반환:
- Value, 로드된 모듈 객체를 반환합니다.
remove
샌드박스에서 지정된 기본 모듈을 제거합니다.
1SandBox.remove(String id);
호출 매개변수:
- id: 문자열, 삭제할 모듈의 이름을 지정합니다. 이 경로는 현재 실행 중인 스크립트와 관련이 없으며 절대 경로 또는 모듈 이름이어야 합니다.
has
샌드박스에서 기본 모듈 존재 여부 감지
1Boolean SandBox.has(String id);
호출 매개변수:
- id: 문자열, 감지할 모듈의 이름을 지정합니다. 이 경로는 현재 실행 중인 스크립트와 관련이 없으며 절대 경로 또는 모듈 이름이어야 합니다.
결과 반환:
- Boolean, 존재합니까?
clone
현재 샌드박스를 복사합니다. 새 샌드박스에는 동일한 이름과 필수 기능을 가진 현재 샌드박스의 모듈이 포함되어 있습니다.
1SandBox SandBox.clone();
결과 반환:
- SandBox, 새 샌드박스 복사
freeze
현재 샌드박스와 고정된 샌드박스를 고정합니다.global변경사항은 무시됩니다.
1SandBox.freeze();
run
스크립트를 실행하다
1SandBox.run(String fname);
호출 매개변수:
- fname: 문자열, 실행할 스크립트의 경로를 지정합니다. 이 경로는 현재 실행 중인 스크립트와 관련이 없으며 절대 경로여야 합니다.
resolve
모듈을 쿼리하고 모듈의 전체 파일 이름을 반환합니다.
1
2String SandBox.resolve(String id,
String base);
호출 매개변수:
- id: 문자열, 로드할 모듈의 이름을 지정합니다.
- base: 문자열, 검색 경로를 지정합니다.
결과 반환:
- String, 로드된 모듈의 전체 파일 이름을 반환합니다.
require
모듈을 로드하고 모듈 객체를 반환합니다.
1
2Value SandBox.require(String id,
String base);
호출 매개변수:
- id: 문자열, 로드할 모듈의 이름을 지정합니다.
- base: 문자열, 검색 경로를 지정합니다.
결과 반환:
- Value, 로드된 모듈 객체를 반환합니다.
setModuleCompiler
지정된 extname에 컴파일러를 추가합니다. extname은 시스템 내장 확장자({'.js', '.json', '.jsc', '.wasm'}), 컴파일러는 유효한 자바스크립트 스크립트를 반환해야 합니다.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
호출 매개변수:
- extname: 문자열, 지정된 extname은 '.'으로 시작해야 하며 시스템 내장 확장이 아닙니다.
- compiler: 함수, 컴파일 콜백 함수, extname이 있는 모든 파일은 한 번만 필요합니다. 콜백 함수 형식은
compiler(buf, requireInfo)
, buf는 읽기 파일입니다.Buffer, requireInfo 구조는 입니다{filename: string}
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22var vm = require('vm');
var sbox = new vm.SandBox({});
// compile ts to js and load
sbox.setModuleCompiler('.ts', tsCompiler);
var mod_ts = sbox.require('./a.ts');
// compile coffee to js and load
sbox.setModuleCompiler('.coffee', cafeCompiler);
var mod_coffee = sbox.require('./a.coffee');
// compile jsx to js and load
sbox.setModuleCompiler('.jsx', reactCompiler);
var mod_react = sbox.require('./a.jsx');
// compile yaml to rest and load
sbox.setModuleCompiler('.yml', yaml2Rest)
sbox.setModuleCompiler('.yaml', yaml2Rest)
// compile markdown to html and load
sbox.setModuleCompiler('.md', mdCompiler)
sbox.setModuleCompiler('.markdown', mdCompiler)
toString
객체의 문자열 표현을 반환하며 일반적으로 "[Native Object]"를 반환하며 객체 자체의 특성에 따라 다시 구현될 수 있습니다.
1String SandBox.toString();
결과 반환:
- String, 객체의 문자열 표현을 반환합니다.
toJSON
객체의 JSON 형식 표현을 반환하며 일반적으로 객체에 의해 정의된 읽을 수 있는 속성 컬렉션을 반환합니다.
1Value SandBox.toJSON(String key = "");
호출 매개변수:
- key: 문자열, 사용되지 않음
결과 반환:
- Value, 직렬화 가능한 JSON을 포함하는 값을 반환합니다.