Articles of eval

用于运行不可信用户的Node.js Sandbox提交代码

我正在尝试获取能够运行不受信任的用户提交的代码的node.js沙箱。 有几个关于这个职位,但他们都是老。 我希望一个最新的职位将有所帮助。 (2011) 如何在node.js沙箱中安全地运行用户提交的脚本? (2012) 如何运行不受信任的代码serverside? (2013) 安全沙盒并执行用户提交的JavaScript? 通过其他职位和研究,我发现了以下沙箱和漏洞: (Jailed) https://github.com/asvd/jailed (Jailed Exploit) https://github.com/asvd/jailed/issues/33 (沙盒) https://github.com/gf3/sandbox (沙盒利用) https://github.com/gf3/sandbox/issues/50 (Sandcastle) https://github.com/bcoe/sandcastle (Sandcastle Exploit) https://github.com/bcoe/sandcastle/issues/70 (节点的VM) https://nodejs.org/api/vm.html#vm_vm_runinthiscontext_code_options (在文档中)注意:vm模块不是安全机制。 不要用它来运行不可信的代码。 (VM2) https://github.com/patriksimek/vm2 (VM2漏洞) https://github.com/patriksimek/vm2/issues/76 有没有人知道没有已知漏洞的node.js沙箱?

javascript评估简单用户提交的math节点.js

我需要评估一些简单的用户提交的math。 例如,乘以2个数字。 这打开了我注射攻击。 我的计划是在评估之前将一些值列入白名单[^|(|)|\d+|\*|\/|\+|-]并用正则expression式replace其他项。 这有什么问题? 示例string: 324*32 (5+4-17) / 3

Javascript /我的dynamicfunction是否安全?

可能重复: 如何在node.js沙箱中安全地运行用户提交的脚本? 我希望我的用户可以创build自己的格式函数,使用特定的对象。 我find了两种方法,但是我不知道这个function是否可以被黑客入侵。 它在nodeJS中运行。 //First way with eval (evil ?) function convertObj(formula) { return function (obj) { return eval(formula); }; } // Second way with function (same as eval ?) function convertObj2(formula) { return new Function("obj", "return " + formula); } var inst = { "name": "BOB", "age": "30" }; var formula = "obj.name.toLowerCase() […]

安全地parsing和评估用户input

我正在开发一个基本上是模板领域特定语言的项目。 在我的项目中,我接受以下forms的用户input行: '{{index(1, 5)}}' '{{firstName()}} X. {{lastName()}}' '{{floating(-0.5, 0.5)}}' '{{text(5, "words")}}' 双花括号( {{ }} )之间的任何命令都有相应的Javascript方法,应该在遇到该命令时调用它。 (例如, function index(min, max) {…}在第一个的情况下)。 我很难搞清楚如何安全地接受input并调用适当的function。 我知道我现在做的方式是不安全的。 我简单地eval()两组大括号之间的任何东西。 我怎样才能parsing这些inputstring,以便我可以灵活地匹配花括号之间的函数调用,并用给定的参数执行该函数,而不是盲目地用代码调用eval() ? 我已经考虑做一个映射(如果命令是index() ,调用function index() {} ),但这似乎不是很灵活; 如何收集和传递任何参数(如{{index(2, 5)}} )? 这是写在Node.js.

eval的替代品

我的程序处理许多不同types的文件,从中提取信息。 它有一个非常通用的结构来适应我们使用的数百种不同types/格式的文档。 处理器代码: Processor.prototype.process = function(){ var self = this; var fields = self.processor_config; var p = {}; for(key in fields){ if(fields.hasOwnProperty(key)){ p[key]=self._processKey(fields[key]); if(typeof(p[key])=='undefined' || p[key]===''){ self.emit('warning', { type: 'Problem parsing Key', msg: 'Key : '+key, doc: self.docName }); } } } self.emit('extracted',p); }; processKey()函数然后根据“types”字段sorting出要执行的操作: Productor.prototype._processKey = function(cnf) { var self = this; var value; […]

如何评估eval()内的console.log(1 + 2)?

我试图通过节点控制台发送一个参数,并希望在eval函数内执行它。 什么即时消息写在控制台是这样的: node main console.log(1+1) main.js文件是这样的: var x = ""; process.argv.forEach(function (val, index, array) { console.log(index + ': ' + val); x = val; }); var eval = require('eval') eval("(" + x + ")"); 它会抛出这个错误: D:\Sandbox\jsdom>node main console.log(1+2) 0: C:\Program Files\nodejs\node.exe 1: D:\Sandbox\jsdom\main 2: console.log(1+2) evalmachine.<anonymous>:1 (console.log(1+2)) ^ ReferenceError: console is not defined at evalmachine.<anonymous>:1:2 […]

eval不能在nodejs下工作

eval如何在nodejs下不起作用? function show(myVariable) { var myValue = eval(myVariable); console.log(myVariable + "=" + myValue); } var foo = "bar"; show("foo"); 在HTML页面上,这将在控制台日志中返回foo=bar 在nodejs控制器中,它给出了SyntaxError: Invalid or unexpected token 这是原始的代码: "use strict"; var mongoose = require('mongoose'); function show(myVariable) { var myValue = eval(myVariable); console.log(myVariable + "=" + myValue); } exports.messageSave = function(req, callback) { var foo = "bar"; show("foo"); […]

语法错误,而eval()的一个对象

我试图parsing一个像这样的对象,使用nodejs: { 1: [a, b, c], 2: [d, e, f], … } 与a,b,c,d,e,fvariables与定义的值。 我真的很想这样,这个对象可以真正被读取(可以被人类写入)。 所以,我现在正在做的是打开一个包含前一个对象的文件,将数据放在一个可变data ,然后注入 var a=1,b=2,c=3,d=4,e=5,f=6,…; 就在真正的内容之前: data = "var a=1,b=2,c=3,d=4,e=5,f=6,…;" + data; 最后,我使用eval()来获得一个可用的对象: my_obj = eval(data); 然而,这不起作用(至less使用nodejs),在对象的第二个元素之后(在前面的例子中紧跟在2之后)的: token上带有SyntaxError。 为了解决这个问题,我现在正在围绕我的对象: data = "var obj = " + data + "; obj"; data = "var a=1,b=2,c=3,d=4,e=5,f=6,…;" + data; 与此同时,它的工作。 问题是why ? 可选的问题是:你有更好的方法来实现我想要的吗? 谢谢! eval()调用之前的真实数据 […]

// @sourceurl在脚本标签在Firefox中

问候 , 在firefox 19和firebug 1.X中,我在尝试//@sourceurl时遇到了一个奇怪的错误。 基本上我通过dom操作dynamic地添加脚本标记,如下面的示例中所示。 这不起作用。 也许这是一个ff的限制,但我觉得奇怪的是它在铬中,而不是ff。 你能证实这一点,你有任何绕过这个错误? Ps:我不想使用全局eval()因为它在使用document.write时会崩溃 <script type="text/javascript"> var count=0; function addNewScriptToHead() { var newScriptElem; var newScriptText; newScriptElem = document.createElement('script'); newScriptElem.setAttribute('type', 'text/javascript'); newScriptElem.setAttribute('id', '' + count); newScriptElem.text= 'console.log("Yay !");//@ sourceURL=root/test'+count++ +'.js'; document.body.appendChild(newScriptElem); }; </script> </head> <body> <button onclick="addNewScriptToHead()">add script</button><br><br> </body>

Socket.io-client连接到多个服务器

我试图从一台服务器(作为主服务器)连接到另外两台使用socket.io和socket.io客户端节点模块的服务器(充当从服务器,代码相同),使用以下代码: var ioClient = require('socket.io-client'); var hosts = require('./hosts'); var x = {} for (var i in hosts.get) { var name = 'ns' + i; x[name] = ioClient.connect(hosts.get[i].url, { 'force new connection':true }); x[name].on('connect', function() { console.log(x[name].socket.options.host + ' connected') }); } 正如你所看到的,我试图连接到X个不同的服务器(在文件hosts.js中定义)并将每个套接字存储在一个对象中。 问题是,尽pipe我能够连接,所有的套接字似乎来自最后一个主机,所以我最终是这样的: host2.pc.gg.edu connected host2.pc.gg.edu connected 当期望值是: host1.pc.gg.edu connected host2.pc.gg.edu connected 我试过断开host1,然后输出结果是这样的: host2.pc.gg.edu […]