如何在Javascript中执行以base64编码的代码

Pro*_*mer 2 html javascript base64

我在 html 页面(JavaScript)中有此代码:

<script>
    var cox,d = 0;
    Console.Log(cox,d);
</script>
Run Code Online (Sandbox Code Playgroud)

现在我[var cox,d = 0; Console.Log(cox,d);]用 base64 编码手动加密,结果是这样的:IHZhciBjb3gsZCA9IDA7DQogQ29uc29sZS5Mb2coY294LGQpOw==

我希望这个编码的字符串(代码)可以由同一页面中的另一个 JavaScript 函数执行......例如:

<script>
    var encoded = "IHZhciBjb3gsZCA9IDA7DQogQ29uc29sZS5Mb2coY294LGQpOw==";
    var decodedString = atob(encoded);
    /* Problem is here */
</script>
Run Code Online (Sandbox Code Playgroud)

我想在/* Problem is here */'.

我能怎么做?

Raf*_*ilt 5

您可以使用eval函数(不推荐),但它可以解决您的问题。

/* var cox,d = 0; console.log(cox,d); */
var encoded = "dmFyIGNveCxkID0gMDsgY29uc29sZS5sb2coY294LGQpOw==";
var decodedString = atob(encoded);


eval(decodedString);
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用New Function 构造函数

/* var cox,d = 0; console.log(cox,d); */
var encoded = "dmFyIGNveCxkID0gMDsgY29uc29sZS5sb2coY294LGQpOw==";
var decodedString = atob(encoded);

var func = new Function(decodedString);
func();
Run Code Online (Sandbox Code Playgroud)

*编码代码时,控制台和日志必须是小写的,而不是 ucfirst。

我不是安全专家,我真诚地建议您检查在您的应用程序中评估和执行此类功能的风险。

这里有一个有趣的答案约之间的区别evalnew Function