JavaScript eval()安全问题

2015-07-28 17:31:41 +08:00
 qnsh

代码 eval('(' + Text + ')') 存在注入问题,有什么方法可以替代或避免该问题吗?

6998 次点击
所在节点    JavaScript
25 条回复
jugelizi
2015-07-29 09:02:14 +08:00
@sneezry 这完全是一个信任边界的问题,好比我们认为国内的浏览器不会把cookie发送到自己的服务器一样,当eval执行服务器返回代码我们要做的就是保证服务器返回的是我们可控的。
sneezry
2015-07-29 09:18:00 +08:00
@jugelizi 您说的对,是信任问题。如果能保证是最完美的情况,当然也是正常的情况,但不可否认总是有小概率个别情况。安全问题真的不能小视,我们很难把全部情况都考虑到。
accps115202
2015-07-29 09:22:47 +08:00
var json =(new Function("","return "+texts))(); --可以用这个替代
bramblex
2015-07-29 10:00:35 +08:00
@sneezry 首先,我还真不是“前端程序员”……

1. ==============================================
上面所谓的安全问题出在那里?所谓的服务器bug是是什么问题?

说白了就是代码和数据耦合。因为你让服务器去给你生成了一段代码,然后执行。

为什么你需要让服务器给你生成代码?因为你你把数据插进了代码里面,所以需要才需要让服务器给你生成代码。

最后产生什么?你所说的“安全问题”。但这些问题只是因为程序设计的问题,而不是eval的问题。

2.==============================================
eval还要执行自己生成的代码。为啥要自己生成代码(用js生成js代码)?当然是实现原生JS不能实现的功能啊。

比如你给我实现一下,如何重命名一个函数。比如一个 (function(){}) 我要把它变成命名的 (function name(){})
zythum
2015-07-29 10:54:37 +08:00
@FrankFang128 ... 只会有个warnning... 不过我们跑题了... 就此打住吧。 : )

给po主的结论是.

如果你的代码就是个内部工具。或者内部系统。对安全没有要求的。请无视这个。

如果需要考虑安全问题:

1. 要么确保你的text的你可信任。
2. 要么给text的数据做数据结构解析,或者安全性检测(字符串层面的)。(JSON2,JSON3 对与JSON.parse 的 低级浏览器就是这么做的)。然后再eval.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208978

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX