Re: [问题] 要怎么取得所有的物件?

楼主: LaPass (LaPass)   2015-05-20 18:48:38
※ 引述《mrbigmouth (大嘴先生)》之铭言:
: (function(global) {
: var i;
: for (i in global) {
: console.log(i+":");
: console.dir(global[i]);
: }
: }(this))
感谢 mrbigmouth 大大
这已经很接近我想要得结果了
我想作的是这种事情:
(function(global) {
var i;
for (i in global) {
eval("var "+i+"=null;");
}
console.log("ERR HERE");
})((new Function("return this;"))());
console.log('OK HERE');
用闭包的区域变量,盖掉全域变量,制造一个“干净”的环境出来跑别人的CODE。
假设我不让他用console,就把console = null;
这样他就执行不到了。
只留下我想让他跑的部份
但是,目前还有漏掉
像是 Function 、 Date 这种物件就没盖到
还有 node.js 的 require也还在
像这种东西我还在找方法列举他
一旦能列举,就能够用
var Function = null;的方式去盖掉了
作者: mmis1000 (秋月恋枫)   2015-05-20 19:03:00
别自干sandbox,你的方法有洞,会被拿到require恶搞(0).constructor.constructor('return this')()这一行能拿到真正的global,而且一个关键字都没
楼主: LaPass (LaPass)   2015-05-20 20:01:00
=口=|||
作者: danny8376 (钓到一只猴子@_@)   2015-05-20 22:13:00
JS很复杂的wwww
楼主: LaPass (LaPass)   2015-05-20 22:57:00
那要在JS底下运行脚本,是不是都没办法了啊..... (或是用JS自干一个编译器出来,但效能应该会很悲剧)
作者: mmis1000 (秋月恋枫)   2015-05-20 23:35:00
nodejs有一些现成的sandbox模组https://github.com/bcoe/sandcastle 像这个不过仍然不能保证100%安全,毕竟nodejs本身的andbox就是有洞的,而这些也只是试图把动堵起来
楼主: LaPass (LaPass)   2015-05-20 23:42:00
可是浏览器上没办法跑node.js
作者: mmis1000 (秋月恋枫)   2015-05-20 23:42:00
error.capturestacktrace 主要是这东西的问题那用一个不同domain的iframe去跑
楼主: LaPass (LaPass)   2015-05-20 23:43:00
server端可能还比较好解决,因为可以用其他语言去搞个js编译器去跑,网页就没办法... 而且我需要他跑出来的结果。iframe也不是那么好解决
作者: mmis1000 (秋月恋枫)   2015-05-20 23:45:00
或是用web worker之类反正一定要在完全不同scope下,不然等著被玩可以一个帮助的script,把危险code eval在worker里
楼主: LaPass (LaPass)   2015-05-20 23:50:00
orz..... 这个我知道.....
作者: mmis1000 (秋月恋枫)   2015-05-20 23:50:00
让他什么都看不到
楼主: LaPass (LaPass)   2015-05-20 23:51:00
来试试看worker好了
作者: mmis1000 (秋月恋枫)   2015-05-21 02:35:00
楼主: LaPass (LaPass)   2015-05-21 10:49:00
好东西!!OAO!!http://f23ko.com/JSTEST/websocket.html 我自己写了一个来试试看,这样OK XD

Links booklink

Contact Us: admin [ a t ] ucptt.com