作者LaPass (LaPass)
看板Ajax
标题Re: [问题] 要怎麽取得所有的物件?
时间Wed May 20 18:48:38 2015
※ 引述《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;的方式去盖掉了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.87.115
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1432118921.A.676.html
1F:→ mmis1000: 别自干sandbox,你的方法有洞,会被拿到require恶搞 05/20 19:03
2F:→ mmis1000: (0).constructor.constructor('return this')() 05/20 19:50
3F:→ mmis1000: 这一行能拿到真正的global,而且一个关键字都没 05/20 19:51
4F:→ LaPass: =口=||| 05/20 20:01
5F:→ danny8376: JS很复杂的wwww 05/20 22:13
6F:→ LaPass: 那要在JS底下运行脚本,是不是都没办法了啊..... (或是用 05/20 22:57
7F:→ LaPass: JS自干一个编译器出来,但效能应该会很悲剧) 05/20 22:57
8F:→ mmis1000: nodejs有一些现成的sandbox模组 05/20 23:35
10F:→ mmis1000: 不过仍然不能保证100%安全,毕竟nodejs本身的andbox就是 05/20 23:41
11F:→ mmis1000: 有洞的,而这些也只是试图把动堵起来 05/20 23:41
12F:→ LaPass: 可是浏览器上没办法跑node.js 05/20 23:42
13F:→ mmis1000: error.capturestacktrace 主要是这东西的问题 05/20 23:42
14F:→ mmis1000: 那用一个不同domain的iframe去跑 05/20 23:43
15F:→ LaPass: server端可能还比较好解决,因为可以用其他语言去搞个js编 05/20 23:43
16F:→ LaPass: 译器去跑,网页就没办法... 而且我需要他跑出来的结果。 05/20 23:45
17F:→ LaPass: iframe也不是那麽好解决 05/20 23:45
18F:→ mmis1000: 或是用web worker之类 05/20 23:45
19F:→ mmis1000: 反正一定要在完全不同scope下,不然等着被玩 05/20 23:47
20F:→ mmis1000: 可以一个帮助的script,把危险code eval在worker里 05/20 23:50
21F:→ LaPass: orz..... 这个我知道..... 05/20 23:50
22F:→ mmis1000: 让他甚麽都看不到 05/20 23:50
23F:→ LaPass: 来试试看worker好了 05/20 23:51
25F:→ mmis1000: 来个实验... 05/21 02:35
27F:→ LaPass: 好东西!!OAO!! 05/21 10:49
29F:→ LaPass: 来试试看,这样OK XD 05/22 01:29