这是一个快速应用程序,我正在使用CodeMirror,允许学生程序员在一个美化的文本区域编写代码。我使用eval()来计算该代码,以便为它们输出一个结果。此结果将使用socket.io传递给服务器,然后返回给客户端。
var codeInput = editor.getValue();
var result = eval(codeInput);
socket.emit('sendResult', result);这个安全吗?这是否比发送用户提交的用户名、密码或电子邮件更有损于我的应用程序的安全性?
发布于 2016-09-09 16:19:28
在没有附加保护的情况下,通过设计在服务器上托管的(大部分) 反映的跨站点脚本漏洞中显式地创建一个applIcations。
如果站点上除了静态内容之外没有其他任何内容,而且您可以保证站点上不会有任何其他内容,那么您只需要担心对结果做了什么处理(在将内容提交到存储之前正确地转义内容,在显示结果之前正确地转义内容)。
也就是说,这应该有一个专用的vhost名称。
发布于 2016-09-09 16:11:04
如果不正确地使用eval,您的应用程序可能会受到注入攻击,我想这将是主要的问题。所以简单地说,是的,你的应用程序的安全性肯定会因为使用eval而受到损害。
此外,调试将更加困难,因为您将没有行号的可见性,性能也在此之上。
出于兴趣,你有没有探索过其他的途径?
发布于 2016-09-10 23:44:09
基于执行eval的上下文,它可能非常危险。
一个快速的折衷方案可能是在沙箱内的IFrame中执行eval。
这里一个简单的例子,其中
window.localStorage['sekrit']只使用“允许-脚本”权限(sandbox=“允许-脚本”)执行。
我认为您需要的全部内容都可以在源代码页面中找到。
更多详细信息和其他权限列表可以找到在本文中。。
https://stackoverflow.com/questions/39415615
复制相似问题