看板 Ajax 關於我們 聯絡資訊
※ 引述《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://www.ptt.cc/bbs/Ajax/M.1432118921.A.676.html
mmis1000: 別自幹sandbox,你的方法有洞,會被拿到require惡搞 05/20 19:03
mmis1000: (0).constructor.constructor('return this')() 05/20 19:50
mmis1000: 這一行能拿到真正的global,而且一個關鍵字都沒 05/20 19:51
LaPass: =口=||| 05/20 20:01
danny8376: JS很複雜的wwww 05/20 22:13
LaPass: 那要在JS底下運行腳本,是不是都沒辦法了啊..... (或是用 05/20 22:57
LaPass: JS自幹一個編譯器出來,但效能應該會很悲劇) 05/20 22:57
mmis1000: nodejs有一些現成的sandbox模組 05/20 23:35
mmis1000: https://github.com/bcoe/sandcastle 像這個 05/20 23:38
mmis1000: 不過仍然不能保證100%安全,畢竟nodejs本身的andbox就是 05/20 23:41
mmis1000: 有洞的,而這些也只是試圖把動堵起來 05/20 23:41
LaPass: 可是瀏覽器上沒辦法跑node.js 05/20 23:42
mmis1000: error.capturestacktrace 主要是這東西的問題 05/20 23:42
mmis1000: 那用一個不同domain的iframe去跑 05/20 23:43
LaPass: server端可能還比較好解決,因為可以用其他語言去搞個js編 05/20 23:43
LaPass: 譯器去跑,網頁就沒辦法... 而且我需要他跑出來的結果。 05/20 23:45
LaPass: iframe也不是那麼好解決 05/20 23:45
mmis1000: 或是用web worker之類 05/20 23:45
mmis1000: 反正一定要在完全不同scope下,不然等著被玩 05/20 23:47
mmis1000: 可以一個幫助的script,把危險code eval在worker裡 05/20 23:50
LaPass: orz..... 這個我知道..... 05/20 23:50
mmis1000: 讓他甚麼都看不到 05/20 23:50
LaPass: 來試試看worker好了 05/20 23:51
mmis1000: 來個實驗... 05/21 02:35
mmis1000: https://github.com/eligrey/jsandbox 現成的東西 05/21 03:59
LaPass: 好東西!!OAO!! 05/21 10:49
LaPass: http://f23ko.com/JSTEST/websocket.html 我自己寫了一個 05/22 01:29
LaPass: 來試試看,這樣OK XD 05/22 01:29