使用eval()来评估学生程序员的代码。安全漏洞?

时间:2016-09-09 16:05:11

标签: javascript node.js security express socket.io

这是一个快速应用程序,我使用CodeMirror来允许学生程序员在美化的textarea中编写代码。我正在使用eval()来评估该代码,以便我可以为它们输出结果。使用socket.io将此结果传递给服务器,然后返回到客户端。

var codeInput = editor.getValue();
var result = eval(codeInput);
socket.emit('sendResult', result);

这样安全吗?这是否会影响我的应用程序的安全性,而不仅仅是发送用户提交的用户名或密码或电子邮件?

4 个答案:

答案 0 :(得分:0)

不正确使用eval会打开你的应用程序注入攻击我想这将是主要问题。简而言之,是的,您的应用程序的安全性肯定会因使用eval而受到损害。

此外,调试起来会更加困难,因为你没有线号的可见性,性能也是最重要的。

出于兴趣,你有没有探索过任何其他途径?

答案 1 :(得分:0)

在没有额外保护的情况下,这会明确地在服务器上托管的(大部分)应用程序中创建reflected cross-site scripting vulnerability

如果除了网站上托管的静态内容之外没有其他任何内容,并且您可以保证网站上不会有任何其他内容,那么您只需要担心对结果进行了哪些处理(正确转义内容)在将其提交到存储之前,在显示内容之前正确转义内容。)

即。这应该有一个专用的虚拟名称。

答案 2 :(得分:0)

根据执行eval的上下文,它可能非常危险。

快速妥协可能在沙盒IFrame中执行eval

Here一个简单的例子,其中

window.localStorage['sekrit']
仅使用" allow-scripts"执行

;权限(sandbox =" allow-scripts")。

我认为您可以在该页来源找到您所需的一切。

可以找到更多详细信息和其他权限列表in this article.

答案 3 :(得分:-2)

我建议使用类似JSLint的东西,而不是用eval执行代码。

JSLint将解析并分析源代码并将返回结果。 所以你不会遇到任何安全问题。

Here你可以看到它的实际效果。

相关问题