рдирдорд╕реНрддреЗ,
рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ рдмрд┐рд▓реНрдЯрд┐рди рдореЙрдбреНрдпреВрд▓ рд╣реЛрд╕реНрдЯ рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╡реАрдПрдо рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИ:
const vm = new NodeVM({
require: {
external: true,
context: 'sandbox',
builtin: ['*'],
},
});
vm.run(...);
рд╡реАрдПрдо рдХреЗ рдЕрдВрджрд░ рдореБрдЭреЗ рдПрдХ рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ( axios
рдЕрдЧрд░ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ) рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдФрд░ рдореЙрдбреНрдпреВрд▓ ( follow-redirects
) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдпрд╣ (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо) рдХрд░рддрд╛ рд╣реИ:
var Writable = require('stream').Writable;
function RedirectableRequest(options, responseCallback) {
// .....
}
RedirectableRequest.prototype = Object.create(Writable.prototype);
RedirectableRequest.prototype._performRequest = function () { // <-------- this line breaks
// ..........
}
рдЗрд╕ рдХреЛрдб рдХреЛ vm рдереНрд░реЛ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рд╛рдирд╛: TypeError: рдкреНрд░реЙрдХреНрд╕реА рдкрд░ 'рд╕реЗрдЯ': рд╕рдВрдкрддреНрддрд┐ '_performRequest' рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдк рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓реМрдЯрд╛ред
рд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ vm рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЗрд╕ рдХреЛрдб рдХреЛ рддрдм рдЪрд▓рд╛рдирд╛ рдЬрдм stream
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ vm рдХреЗ рдЕрдВрджрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ (рдпрджрд┐ рдпрд╣рд╛рдБ рджрд┐рдП рдЧрдП рдХрдерди рдХреЛ рд╣рдЯрд╛рдХрд░: https://github.com/patriksimek/vm2/blob/master/lib/sandbox.js#L133) рд╣реИ рдХрд╛рдо рдХрд░ рд░рд╣реЗред
рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рдиреЛрдб 6.10.3 рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж
#127 . рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд
рдореИрдВ рдЖрдЧреЗ рдмрдврд╝ рдЧрдпрд╛ рдФрд░ рдЕрдЧрд░ рдХрдерди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛:
if( vm.options.require.context === 'sandbox' && modulename !== 'async_hooks' ){
рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдиреЛрдб 8.x рдореЗрдВ рдореИрдВ async_hooks . рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛
рдореБрдЭреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рднреА рдорд┐рд▓рд╛ (рдПрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдорд╛рди рдмреЗрд╣рддрд░ рд╣реИ)ред
рдореВрд▓ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЬреЛ рдорд┐рд▓рд╛ рд╡рд╣ рд╕рдВрджрд░реНрдн рдХреЛрдб рдерд╛, рдЬреЛ рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд┐рд╕рдиреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрджрд░реНрдн рд╕реЗ рд▓рд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рдмрдврд╝рд╛рдпрд╛ред
рд╕реЗрдЯ рдкреНрд░реЙрдХреНрд╕реА рд╣реИрдВрдбрд▓рд░ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдЙрд╕ рд╡рд╕реНрддреБ рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП;
рд╡рд╕реНрддреБ
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
a <- рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ)
__рдкреНрд░реЛрдЯреЛ__ (рдкреНрд░реЙрдХреНрд╕реА)
рд╕реЗрдЯ: (){} <- рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ
рдФрд░ рдЬрдм рд╕реЗрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рд╕реАрд╡рд░ рддрд░реНрдХ рдЙрд╕ рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рдереЗред рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рдерд╛:
--- a/node_modules/vm2/lib/contextify.js
+++ b/node_modules/vm2/lib/contextify.js
@@ -17,7 +17,23 @@ const DEBUG = false;
const OPNA = 'Operation not allowed on contextified object.';
const ERROR_CST = Error.captureStackTrace;
const FROZEN_TRAPS = {
- set: (target, key) => false,
+ set: (target, key, value, receiver) => {
+ if( target !== receiver ){
+
+ Object.defineProperty(receiver, key, {
+ value: value,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ })
+
+ return true;
+
+ }
+
+ return false;
+
+ },
рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ? рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореГрдд?
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рднреА рдорд┐рд▓рд╛ (рдПрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдорд╛рди рдмреЗрд╣рддрд░ рд╣реИ)ред
рдореВрд▓ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЬреЛ рдорд┐рд▓рд╛ рд╡рд╣ рд╕рдВрджрд░реНрдн рдХреЛрдб рдерд╛, рдЬреЛ рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд┐рд╕рдиреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрджрд░реНрдн рд╕реЗ рд▓рд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рдмрдврд╝рд╛рдпрд╛ред
рд╕реЗрдЯ рдкреНрд░реЙрдХреНрд╕реА рд╣реИрдВрдбрд▓рд░ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдЙрд╕ рд╡рд╕реНрддреБ рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП;
рд╡рд╕реНрддреБ
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
a <- рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ)
__рдкреНрд░реЛрдЯреЛ__ (рдкреНрд░реЙрдХреНрд╕реА)
рд╕реЗрдЯ: (){} <- рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ
рдФрд░ рдЬрдм рд╕реЗрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рд╕реАрд╡рд░ рддрд░реНрдХ рдЙрд╕ рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рдереЗред рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рдерд╛: