使用eval()来评估学生程序员的代码.安全漏洞
Using eval() to evaluate student programmers code. Security flaw?
这是一个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将解析和分析源代码,并返回它的发现。所以你不会有任何安全问题。相关文章:
- 如何让程序员在javascript中实现正确的回调
- 为什么有些jQuery程序员使用像$.get、$.getJSON和$.when这样的jQuery函数来代替$.ajax
- 为什么Javascript程序员更喜欢在代码中重复字符串作为常量,而不是使用枚举类型的对象
- 电子邮件保护程序:这个代码今天还安全吗
- 如何为略有不同的不同版本的web应用程序构建代码
- 在Angular应用程序中将代码移入工厂
- 以下 Chrome 扩展程序 JavaScript 代码片段究竟是如何工作的
- 是否有一种从应用程序Javascript代码中自动生成序列图的方法
- 用 Javascript/HTML5 编写的 Windows 应用商店应用程序的代码度量选项
- 如何开始使用 jQuery Mobile?(程序员背景)
- 为什么很多程序员把逗号移到下一行
- 第一个JS,向经验丰富的JS程序员寻求建议
- 组织一个中等大小的javascript客户端应用程序的代码进行测试
- 精细的上传程序格式化代码的问题,事件
- 是否存在一种神奇的后端服务,前端程序员可以在其中存储数据
- 为什么这个点击处理程序fadeToggle代码不能工作?
- 如何在android webview中调用程序员定义的javascript函数
- 我想创建一个动态表,当用户点击提交/保存(新手程序员)时,它具有用户输入的数据
- 使用eval()来评估学生程序员的代码.安全漏洞
- 中级javascript程序员编写更好代码的技巧