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

Using eval() to evaluate student programmers code. Security flaw?

本文关键字:程序员 代码 安全漏洞 评估 eval 使用      更新时间:2023-09-26

这是一个express应用程序,我使用CodeMirror允许学生程序员在美化的文本区编写代码。我使用eval()对代码求值,以便为它们输出结果。使用套接字将此结果传递给服务器。

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

这个使用安全吗?这是否比发送用户提交的用户名、密码或电子邮件更危及我的应用程序的安全性?

在没有额外保护的情况下,这会显式地在(大多数)托管在服务器上的应用程序中创建一个反射的跨站点脚本漏洞。

如果站点上除了静态内容之外没有其他内容,并且您可以保证站点上永远不会有其他内容,那么您只需要担心对结果进行什么处理(在提交到存储之前正确地转义内容,在显示内容之前正确地转义内容)。

。这应该有一个专用的vhost名。

eval的不当使用可能会使您的应用程序受到注入攻击,我猜这将是这里的主要问题。所以简而言之,是的,你的应用程序的安全性肯定会因为使用eval而受到损害。

此外,它将更加难以调试,因为您将无法看到行号,并且性能也会受到影响。

出于兴趣,你还探索过其他途径吗?

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

一个快速的折衷方案是在沙盒IFrame中执行eval。

这里有一个简单的例子,其中

window.localStorage['sekrit']

仅在"allow-scripts"权限下执行(sandbox="allow-scripts")。

我认为你所需要的一切都可以在那一页源码找到。

可以在本文中找到更多详细信息和其他权限列表。

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

JSLint将解析和分析源代码,并返回它的发现。所以你不会有任何安全问题。