gpt4 book ai didi

javascript - 通过 AJAX 传递带有函数的 JSON

转载 作者:行者123 更新时间:2023-11-30 11:13:37 24 4
gpt4 key购买 nike

很简单,我想“重新水化”从 AJAX 传递的函数,如下所示:

//AJAX response:
{"foo":"bar","baz":"function(){console.log('I am back working as a function!');}"}

显然,baz 应该是一个函数而不是字符串。我该怎么做?

最佳答案

正如 Jozef 已经建议的那样,您可以使用 eval()

但是,如果您通过 Google 搜索,您会发现不建议使用该功能:

  1. > https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/
  2. > When is JavaScript's eval() not evil?
  3. > https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/
  4. > Why is using the JavaScript eval function a bad idea?

正如这个博客所建议的那样 ( http://2ality.com/2014/01/eval.html ) 我会推荐你​​使用这个:

let json = {"foo":"bar","baz":"function(){console.log('I am back working as a function!');}"};

let func = new Function("console.log('I am back working as a function!');");
func();

如果您无法更改您的 json,您可以简单地使用 str.replace()


请记住,可以执行任意代码!我会强烈建议您这样做,例如……像这样而不是仅仅用一个函数来响应。通过执行以下操作,您将进行某种白名单。因此,无论 http-response 是否被操纵,攻击者都只能执行预定义的 javascript 函数。

function func1() {
console.log('I am back working as a function!');
}

function func2() {
console.log('another code block');
}

let json = {"foo":"bar","baz":"1"};

switch(json.baz) {
case "1": func1();break;
case "2": func2();break;
default: console.error("Invalid response");
}

希望对您有所帮助。

关于javascript - 通过 AJAX 传递带有函数的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52572068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com