객체 내장 객체

개체 샌드박스

독립적인 운영 공간을 관리하는 데 사용되는 보안 샌드박스 개체

모든 코드는 자체 샌드박스에서 실행되며 전역 require는 현재 샌드박스를 호출하여 모듈을 로드하고 샌드박스는 require를 통해 로드된 샌드박스로 전달됩니다. 다음 예제에서는 샌드박스를 만들고 전역 기본 모듈에 대한 액세스를 제한합니다.assert 모듈을 선택하고 두 개의 사용자 정의 모듈(및 b)을 추가합니다.

1 2 3 4 5 6 7 8
var vm = require('vm'); var sbox = new vm.SandBox({ a: 100, b: 200, assert: require('assert') }); var mod_in_sbox = sbox.require('./path/to/mod');

계승

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<this>SandBox|new SandBox()|global;modules|add();addScript();remove();has();clone();freeze();refresh();run();resolve();require();setModuleCompiler()] [object] <:- [SandBox] SandBox new SandBox() global modules add() addScript() remove() has() clone() freeze() refresh() run() resolve() require() setModuleCompiler() object toString() toJSON()

건설자

SandBox

새로운 보안 샌드박스 객체 생성 및 기본 모듈 초기화

1
new SandBox(Object mods);

호출 매개변수:

  • mods: 개체, 추가할 모듈 개체 사전을 지정합니다.

새로운 보안 샌드박스 객체 생성 및 기본 모듈 초기화

1 2
new SandBox(Object mods, Function require);

호출 매개변수:

  • mods: 개체, 추가할 모듈 개체 사전을 지정합니다.
  • require: 함수, 사용자 정의 필요 함수, 모듈이 존재하지 않는 경우 사용자 정의 함수를 먼저 호출한 다음 반환하지 않고 파일에서 로드

새로운 독립 글로벌 보안 샌드박스 객체 생성 및 기본 모듈 초기화

1 2
new SandBox(Object mods, Object global);

호출 매개변수:

  • mods: 개체, 추가할 모듈 개체 사전을 지정합니다.
  • global: 개체, 초기화된 전역 속성 지정

새로운 독립 글로벌 보안 샌드박스 객체 생성 및 기본 모듈 초기화

1 2 3
new SandBox(Object mods, Function require, Object global);

호출 매개변수:

  • mods: 개체, 추가할 모듈 개체 사전을 지정합니다.
  • require: 함수, 사용자 정의 필요 함수, 모듈이 존재하지 않는 경우 사용자 정의 함수를 먼저 호출한 다음 반환하지 않고 파일에서 로드
  • global: 개체, 초기화된 전역 속성 지정

회원 속성

global

개체, 쿼리 샌드박스 global 물체

1
readonly Object SandBox.global;

modules

개체, 샌드박스에 있는 모든 기존 모듈의 사전 개체 쿼리

1
readonly Object SandBox.modules;

멤버 함수

add

샌드박스에 기본 모듈 추가

1 2
SandBox.add(String id, Value mod);

호출 매개변수:

  • id: 문자열, 추가할 모듈의 이름을 지정합니다. 이 경로는 현재 실행 중인 스크립트와 관련이 없으며 절대 경로 또는 모듈 이름이어야 합니다.
  • mod: 값, 추가할 모듈 개체 지정

샌드박스에 기본 모듈 세트 추가

1
SandBox.add(Object mods);

호출 매개변수:

  • mods: 개체, 추가할 모듈 개체 사전 지정, 추가된 자바스크립트 모듈은 샌드박스 수정 개체의 간섭을 피하기 위해 복사본을 생성합니다.

addScript

샌드박스에 스크립트 모듈 추가

1 2
Value SandBox.addScript(String srcname, Buffer script);

호출 매개변수:

  • srcname: 문자열, 추가할 스크립트의 이름을 지정합니다. srcname은 다음과 같은 확장자를 포함해야 합니다. json 또는 js, jsc
  • script: Buffer, 추가할 바이너리 코드 지정

반환 결과:

  • Value, 로드된 모듈 객체를 반환합니다.

remove

샌드박스에서 지정된 기본 모듈 삭제

1
SandBox.remove(String id);

호출 매개변수:

  • id: 문자열, 삭제할 모듈의 이름을 지정합니다. 이 경로는 현재 실행 중인 스크립트와 관련이 없으며 절대 경로 또는 모듈 이름이어야 합니다.

has

샌드박스에서 기본 모듈의 존재 감지

1
Boolean SandBox.has(String id);

호출 매개변수:

  • id: 문자열, 감지할 모듈의 이름을 지정합니다. 이 경로는 현재 실행 중인 스크립트와 아무 관련이 없습니다. 절대 경로 또는 모듈 이름이어야 합니다.

반환 결과:

  • Boolean, 존재합니까

clone

현재 샌드박스를 복사합니다. 새 샌드박스에는 현재 샌드박스의 모듈이 포함되며 이름이 같고 기능이 필요합니다.

1
SandBox SandBox.clone();

반환 결과:

  • SandBox, 새 샌드박스 복사

freeze

현재 샌드박스 고정, 고정 후 샌드박스, 오른쪽 global 수정 사항은 무시됩니다.

1
SandBox.freeze();

refresh

샌드박스에서 모듈을 다시 로드합니다. 이 작업은 모듈을 다시 초기화하고 모듈의 변수를 재설정하고 모듈 코드를 업데이트하지 않습니다.

1
SandBox.refresh();

run

스크립트 실행

1 2
SandBox.run(String fname, Array argv = []);

호출 매개변수:

  • fname: 문자열, 실행할 스크립트의 경로를 지정합니다. 이 경로는 현재 실행 중인 스크립트와 관련이 없으며 절대 경로여야 합니다.
  • argv: 배열, 실행할 매개변수를 지정합니다. 이 매개변수는 스크립트에서 argv를 사용하여 얻을 수 있습니다.

resolve

모듈을 쿼리하고 모듈의 전체 파일 이름을 반환합니다.

1 2
String SandBox.resolve(String id, String base);

호출 매개변수:

  • id: 문자열, 로드할 모듈의 이름을 지정합니다.
  • base: 문자열, 검색 경로 지정

반환 결과:

  • String, 로드된 모듈의 전체 파일 이름을 반환합니다.

require

모듈을 로드하고 모듈 객체를 반환합니다.

1 2
Value SandBox.require(String id, String base);

호출 매개변수:

  • id: 문자열, 로드할 모듈의 이름을 지정합니다.
  • base: 문자열, 검색 경로 지정

반환 결과:

  • Value, 로드된 모듈 객체를 반환합니다.

setModuleCompiler

지정된 extname에 컴파일러를 추가합니다. extname은 시스템 내장 확장자(('.js','.json','.jsc','.wasm'}), 컴파일러는 유효한 자바스크립트 스크립트를 반환해야 합니다.

1 2
SandBox.setModuleCompiler(String extname, Function compiler);

호출 매개변수:

  • 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 22
var vm = require('vm'); var sbox = new vm.SandBox({}); // 编译 typescript 脚本为 js 并加载 sbox.setModuleCompiler('.ts', tsCompiler); var mod_ts = sbox.require('./a.ts'); // 编译 coffee 脚本为 js 并加载 sbox.setModuleCompiler('.coffee', cafeCompiler); var mod_coffee = sbox.require('./a.coffee'); // 编译 jsx 脚本为 js 并加载 sbox.setModuleCompiler('.jsx', reactCompiler); var mod_react = sbox.require('./a.jsx'); // 编译 yml 脚本为自定义的内容(如 API 集合) 并加载 sbox.setModuleCompiler('.yml', yaml2Rest) sbox.setModuleCompiler('.yaml', yaml2Rest) // 编译 markdown 为自定义的内容(如 html 字符串或 XmlDocument 对象) 并加载 sbox.setModuleCompiler('.md', mdCompiler) sbox.setModuleCompiler('.markdown', mdCompiler)

toString

개체의 문자열 표현을 반환하고 일반적으로 "[네이티브 개체]"를 반환하며 개체는 고유한 특성에 따라 다시 구현할 수 있습니다.

1
String SandBox.toString();

반환 결과:

  • String, 객체의 문자열 표현을 반환합니다.

toJSON

객체의 JSON 형식 표현을 반환하고 일반적으로 객체에 의해 정의된 읽을 수 있는 속성 모음을 반환합니다.

1
Value SandBox.toJSON(String key = "");

호출 매개변수:

  • key: 문자열, 미사용

반환 결과:

  • Value, 직렬화 가능한 JSON을 포함하는 값을 반환합니다.