作者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/m.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