Vm2: Dukungan untuk menjalankan vm2 di browser

Dibuat pada 31 Jul 2017  ·  15Komentar  ·  Sumber: patriksimek/vm2

Cabang: https://github.com/patriksimek/vm2/tree/feature-browsers
Perpustakaan: https://github.com/patriksimek/vm2/blob/feature-browsers/dist/vm2.js

Pemakaian

<script src="vm2.js"></script>
<script>
    const vm = new vm2.VM();
    alert(vm.run('Math.random()'));
</script>

Masalah

  • Sandbox dapat di-escape melalui window.top .

MELAKUKAN

  • Hapus NodeVM dari versi browser.
  • Tambahkan BrowserVM ke versi browser dengan fitur terkait browser.
  • Tes browser otomatis.
feature request help wanted

Komentar yang paling membantu

Saya berpikir untuk menggunakan pekerja web agar vm2 berfungsi di browser. Saya akan mencobanya.

Semua 15 komentar

Solusi yang agak rumit dapat melibatkan penulisan ulang AST untuk membungkus setiap akses properti secara manual. Misalnya, let x = foo.bar akan ditulis ulang menjadi let x = (x => (x == window.top) ? (some patch here) : x)(foo.bar) .

Berikut adalah contoh penulisan ulang AST, di mana node pemanggil fungsi dibungkus dalam node seperti ini .

Kerugian dari pendekatan ini adalah Anda tidak dapat dengan mudah men-debug kode yang ditulis ulang, dan dibutuhkan beberapa solusi untuk menangani Fungsi, eval, dan sejenisnya.

Menurut saya satu-satunya cara yang sangat berat yaitu dengan menafsirkan JS sendiri pada dasarnya, atau mengganti konstruksi Functions dengan implementasi khusus (seperti variabel injeksi dan konten parse). Metode ini akan sangat sulit diterapkan.

Penghapusan variabel tidak mungkin dilakukan karena variabel seperti document dan top tidak dapat dihapus atau ditimpa.

@ io4 , mengganti Fungsi, eval dan sejenisnya pada waktu proses tentu saja dimungkinkan dengan penulisan ulang AST dan itu juga tidak terlalu sulit. Namun, hal itu menyebabkan kinerja yang buruk, baik pada "waktu kompilasi" karena Anda harus menulis ulang secara harfiah setiap pemanggilan fungsi dan pada waktu proses karena pemanggilan fungsi harus melalui satu lapisan tipuan.

Masalah ini secara otomatis ditandai sebagai usang karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut. Terima kasih atas kontribusi Anda.

Harap jangan ditutup, ini adalah masalah yang relevan.

Saya berpikir untuk menggunakan pekerja web agar vm2 berfungsi di browser. Saya akan mencobanya.

Mungkin Anda juga bisa memasukkannya ke dalam iframe dengan sandbox. Dengan begitu, jika lolos, itu masih terbatas pada bingkai dan tidak dapat menavigasi konteks penelusuran tingkat atas.

Statusnya adalah kami tidak dapat menggunakan pekerja web karena mereka tidak berbagi memori dengan host. Saya sedang menguji iframe dengan sandbox, tetapi tidak berhasil juga. Tanpa opsi allow-same-origin , vm2 bahkan tidak dimulai. Dengan mengaktifkan opsi itu, saya dapat mengakses jendela level atas. Tapi saya tidak menyerah :)

Jenis kesalahan apa yang diberikannya kepada Anda? Apakah itu perlu mengakses variabel? Apakah perpustakaan itu hilang? Data apa saja yang bisa diambil dengan bertukar pesan antar iframe?

227 menarik, terutama karena Realms disebutkan secara khusus untuk kotak pasir browser.

Saya mencoba untuk memperbaiki akses ke jendela dengan trik yang sama seperti yang dilakukan realms-shim.
Implementasi dapat ditemukan di sini: https://github.com/XmiliaH/vm2/blob/feature-browsers/lib/vm.js
Kerugiannya adalah semua yang ada di vm berjalan dalam mode ketat.

@patriksimek untuk mengatasi masalah window.top , dapatkah Anda tidak mengamati objek dan mematikan skrip (lempar dan kesalahan) jika diubah / digunakan? Jadi, amati properti dan fungsi bungkus

Cabang: https://github.com/patriksimek/vm2/tree/feature-browsers
Perpustakaan: https://github.com/patriksimek/vm2/blob/feature-browsers/dist/vm2.js

Pemakaian

<script src="vm2.js"></script>
<script>
    const vm = new vm2.VM();
    alert(vm.run('Math.random()'));
</script>

Masalah

  • Sandbox dapat di-escape melalui window.top .

MELAKUKAN

  • Hapus NodeVM dari versi browser.
  • Tambahkan BrowserVM ke versi browser dengan fitur terkait browser.
  • Tes browser otomatis.

Saya tidak tahu cara untuk mengamati window atau window.top dengan cara yang memungkinkan untuk melempar sebelum sesuatu terjadi.

Hai
Saya perlu mengimpor vm2.js sebagai modul ke file skrip.
Dapatkah seseorang tolong bantu? Terima kasih

Hai
Saya perlu mengimpor vm2.js sebagai modul ke file skrip.
Dapatkah seseorang tolong bantu? Terima kasih

Bekerja sebagai modul: menambahkan module.exports = vm2; di akhir file.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat