2016-01-05 41 views
3

我一直在评论我可以找到关于在JavaScript网页的客户端使用eval()的安全含义的线程。客户端用于运行不可信代码的JavaScript eval()

我正在实现一个网站,该网站应该允许用户运行他们自己的代码(写在页面上)并在同一页上的另一个div上看到一些可视结果。基本上,我希望用户能够编写有效的JavaScript代码,并让它在同一页面上操作画布。

没有必要对代码进行服务器端评估。

我曾看过Jailed和Caja,但我认为他们可能会增加不需要的额外复杂度。

我明白,做这类事情的方式是在有我的代码库的其他部分没有访问权限的“沙箱”,然而,我的需求是这样的,我不能真正定义一个简单的API提供安全的入口/出口点...我希望用户能够使用任何JavaScript代码,我不想写一个将提供API的解释器。

由于不需要服务器端评估,并且应该只有一个用户在Web会话中执行自己的代码,使用eval()是否安全?

+4

除非该代码与其他用户共享,这可能导致cookie被窃取或其他一些不良行为,我认为它可能是安全的,或者至少它可能会损害用户会话 – alex88

+1

您的eval方法与jsfiddle.net一样安全,但在跨浏览器方式中捕获抛出的错误(js的异常版本)时会遇到问题,并显示导致错误的行。不是为了安全性,但是对于捕获的错误问题,您可能需要考虑创建脚本标记或iframe并在其中执行代码,但是......这不是您所问的:p – hanshenrik

回答

3

如果您的逻辑中没有允许一个人发布供其他人使用的代码的路径,那么您可以按原样使用eval()

您的情况与任何具有浏览器和开发工具的用户无异,他/她可以运行他们想要的任何代码。

相关问题