相关疑难解决方法(0)

什么时候JavaScript的eval()不是邪恶的?

我正在编写一些JavaScript代码来解析用户输入的函数(用于类似电子表格的功能).解析了公式后,我可以将其转换为JavaScript并eval()在其上运行以产生结果.

但是,eval()如果我可以避免它,我总是回避使用,因为它是邪恶的(而且,无论是对还是错,我一直认为它在JavaScript中更加邪恶,因为要评估的代码可能会被用户改变).

那么,什么时候可以使用它?

javascript coding-style eval

253
推荐指数
9
解决办法
8万
查看次数

是否有充分的理由使用eval()?

在我看来,eval()同样不屑于goto.而且eval,我指的是一个用于执行字符串作为代码的函数,如PHP,Python,JavaScript等所示.是否存在使用eval()合理的情况(perl除外)?如果没有,为什么这么多语言实现它呢?

eval

24
推荐指数
3
解决办法
4012
查看次数

为什么eval中的eval不安全?

可能重复:
为什么eval邪恶?

我读过人们声称当使用任意用户输入代码运行时,eval是不安全的.我在访问文件系统等服务器上运行的其他语言中理解这一点.但是,为什么在浏览器中执行代码时这很重要?毕竟,你不能只是启动Firebug并写任何你想要的任意脚本吗?那么eval有何不同呢?

javascript

15
推荐指数
1
解决办法
2811
查看次数

为什么不用eval()JSON?

据我所知eval(),由于安全性,JavaScript中的JSON对象被认为是不好的做法.如果JSON来自另一台服务器,我可以理解这种担忧.

但是如果JSON是由我自己的服务器提供的并且是使用PHP创建的json_encode(让我们假设它没有错误),那么简单地用于eval()读取JS中的JSON 是否合法,或者是否存在我目前无法想到的任何安全问题?

我真的不想处理动态加载JSON解析器,并且很乐意简单地使用eval().

PS:我显然会使用本机JSON对象,如果它可用,但想要回归到eval()IE/Opera.

javascript json eval

8
推荐指数
2
解决办法
1658
查看次数

为什么gmail使用eval?

这个问题表明,使用eval是一种不好的做法,许多其他问题表明它是"邪恶的".

这个问题的答案表明,使用eval()可能有助于其中一种情况:

  • 评估从远程服务器收到的代码.(假设您想通过向其发送JavaScript代码来创建可以远程控制的站点?)
  • 评估用户编写的代码.如果没有eval,则无法编程,例如,在线编辑器/ REPL.
  • 动态创建任意长度的函数(function.length是只读的,所以唯一的方法是使用eval).
  • 加载脚本并返回其值.例如,如果您的脚本是自调用函数,并且您想要对其进行求值并得到它的结果(例如:my_result = get_script_result("foo.js")),那么编写函数get_script_result的唯一方法就是使用在里面评估.
  • 在不同的闭包中重新创建一个函数.

在查看Google帐户页面时,我发现了以下内容:

(function(){eval('var f,g=this,k=void 0,p=Date.now||function(){return+new Date},q=function(a,b,c,d,e){c=a.split("."),d=g,c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(;c.length&&(e=c.shift());) [a lot of code...] q("botguard.bg.prototype.invoke",K.prototype.ha);')})()</script>
Run Code Online (Sandbox Code Playgroud)

我只是无法得到它是如何有用的,因为它与上述任何情况都不匹配.有评论说:

 /* Anti-spam. Want to say hello? Contact (base64)Ym90Z3VhcmQtY29udGFjdEBnb29nbGUuY29tCg== */
Run Code Online (Sandbox Code Playgroud)

我看不出eval将如何用作反垃圾邮件.有人可以告诉我为什么在这个特定情况下使用它?

javascript gwt eval

5
推荐指数
2
解决办法
7753
查看次数

标签 统计

eval ×4

javascript ×4

coding-style ×1

gwt ×1

json ×1