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