Vm2: рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд┐рд▓реНрдЯрд┐рди рдореЙрдбреНрдпреВрд▓ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░реЙрдХреНрд╕реА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЕрдХреНрддреВре░ 2017  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: patriksimek/vm2

рдирдорд╕реНрддреЗ,
рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ рдмрд┐рд▓реНрдЯрд┐рди рдореЙрдбреНрдпреВрд▓ рд╣реЛрд╕реНрдЯ рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╡реАрдПрдо рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИ:

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 рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рднреА рдорд┐рд▓рд╛ (рдПрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдорд╛рди рдмреЗрд╣рддрд░ рд╣реИ)ред

рдореВрд▓ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЬреЛ рдорд┐рд▓рд╛ рд╡рд╣ рд╕рдВрджрд░реНрдн рдХреЛрдб рдерд╛, рдЬреЛ рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд┐рд╕рдиреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрджрд░реНрдн рд╕реЗ рд▓рд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рдмрдврд╝рд╛рдпрд╛ред

рд╕реЗрдЯ рдкреНрд░реЙрдХреНрд╕реА рд╣реИрдВрдбрд▓рд░ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдЙрд╕ рд╡рд╕реНрддреБ рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП;
рд╡рд╕реНрддреБ
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
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;
+
+   },

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

#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;
+
+   },

рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ? рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореГрдд?

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

patriksimek picture patriksimek  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

seanc picture seanc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: рдкреНрд░реЙрдХреНрд╕реА рдкрд░ 'рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ': рд╕рдВрдкрддреНрддрд┐ 'рд╕реНрдерд┐рд░рд╛рдВрдХ' рдкреНрд░реЙрдХреНрд╕реА рд▓рдХреНрд╖реНрдп рдкрд░ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЧреИрд░-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рд▓реЗрдХрд┐рди рдкреНрд░реЙрдХреНрд╕реА рдиреЗ рдЕрдкрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛
karthikv picture karthikv  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

unxcepted picture unxcepted  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ