Saya sedang membangun situs web publik tempat pengguna berbagi data dan skrip untuk menjalankan beberapa data. Skrip dijalankan di sisi server di semacam kotak pasir tanpa interaksi lain siklus ini: program Perl saya membaca dari database skrip buatan pengguna, menambahkan data untuk diproses menjadi skrip (yaitu: dokumen JSON) kemudian memanggil penerjemah, itu mengembalikan respons (dokumen JSON atau teks biasa), saya menyimpannya ke database dengan skrip perl saya. Script harus dapat memiliki beberapa akses ke fungsi built-in yang ditambahkan ke bahasa scripting sendiri, tetapi tidak lebih.
Jadi saya telah menemukan node.js sebagai penerjemah javascript, dan beberapa jam yang lalu dengan Google V8 (apakah v8 masuk akal untuk hal semacam ini?). CoffeeScript juga muncul di benak saya, karena terlihat bagus dan masih Javascript.
Saya pikir javascript cukup luas dan lebih "sandboxeable" karena tidak memiliki panggilan OS atau apa pun yang jauh tidak aman (saya pikir).
omong-omong, saya menulis sistem pada Perl dan Php untuk ujung depan.
Untuk meningkatkan pertanyaan: Saya memilih Javascript karena saya pikir aman dan cukup sederhana untuk diterapkan dengan node.js, tetapi apa alternatif lain untuk mencapai tugas semacam ini? Lua? Python? Saya hanya tidak dapat menemukan informasi tentang cara menjalankan juru bahasa berpasir dengan cara yang benar.
Jawaban:
Java mengandung penerjemah JavaScript bawaan. Secara default bukan kotak pasir, tetapi ini bisa diaktifkan oleh:
java = undefined;Packages = undefined;org = undefined;
Jika Anda melakukan ini, skrip yang berjalan di dalam seharusnya tidak dapat mengakses lingkungan luar dengan cara apa pun.
Ini juga menyediakan batas waktu skrip dan fungsionalitas penghitungan jumlah instruksi yang berguna untuk sandboxing - Anda dapat membatasi berapa lama atau seberapa kompleks skrip tersebut.
Saya menggunakan ini di Java 7 yang memiliki mesin JavaScript Badak. Java 8 memiliki mesin Nashorn yang lebih baru dan lebih modern - Saya tidak mencobanya dengan Nashorn tetapi saya berharap ini harus serupa.
sumber
window
variabel untuk JavaScript untuk memungkinkan interaksi.Pikiran pertama saya adalah node.js - seperti yang Anda sebutkan di atas itu adalah javascript-interpreter. Dan itulah yang Anda butuhkan, jika Anda ingin mengamplas skrip dengan cara yang benar-benar aman.
Cara lain bisa jadi, bahwa Anda memeriksa setiap perintah dalam skrip, apakah itu valid atau tidak. Tapi saya tidak berpikir Anda akan mendapatkan kotak pasir yang aman.
Salam pembuka
sumber