Apa pilihan saya untuk skrip kotak pasir sisi server? [Tutup]

11

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.

alfa64
sumber
Tidak jelas apa yang Anda minta. Apa itu mungkin? Tentu itu mungkin.
Robert Harvey

Jawaban:

3

Java mengandung penerjemah JavaScript bawaan. Secara default bukan kotak pasir, tetapi ini bisa diaktifkan oleh:

  • pengaturan shutter kelas yang benar - JavaScript biasanya dapat memuat kelas Java. Rana kelas adalah sejenis manajer keamanan yang memutuskan kelas mana yang bisa dimuat dan mana yang tidak.
  • "startup" script - inisialisasi JavaScript singkat yang menghapus titik akses ke sistem luar: 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.

qbd
sumber
Bisakah Anda daftar putih daripada daftar hitam?
Petah
@ Petah, Anda dapat pertama-tama menonaktifkan (daftar hitam) semuanya dan kemudian mendorong beberapa fungsi tertentu dalam bentuk objek ke kotak pasir. Ini pada dasarnya adalah daftar putih, jadi ya, Anda bisa melakukannya.
qbd
Pengetahuan JavaScript cukup luas untuk menjadikannya pilihan yang baik sebagai bahasa scripting. Anda mungkin ingin mendefinisikan beberapa global serta panggilan untuk pengguna karena Anda membatasi akses ke panggilan. Pikirkan bagaimana browser mendefinisikan windowvariabel untuk JavaScript untuk memungkinkan interaksi.
Michael Shopsin
2

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

Tobi
sumber
Apakah ada suport sandboxing i NodeJS atau tersedia dengan NodeJS?
ysdx
4
Ditemukan ini: gf3.github.com/sandbox
ysdx
+1 untuk tautan hebat ke "NIFTY JAVASCRIPT SANDBOX FOR NODE.JS".
Jack Stone
Catatan: kotak pasir gf3 dapat rusak.
Petah