Khususnya, ini tentang ekstensi game yang ditulis dalam lua (luajit-2.0). Saya merenungkan apakah saya harus membatasi apa yang bisa dilakukan skrip ini, dan sampai pada kesimpulan bahwa saya mungkin tidak boleh:
Sulit untuk menjadi benar. Kedengarannya konyol, tapi kemungkinan kotak pasirku akan bocor.
Satu-satunya manfaat yang dapat saya pikirkan adalah memberi pengguna rasa aman saat menjalankan skrip pihak ketiga.
Kerugiannya adalah itu hanya sangat menjengkelkan bagi penulis ekstensi. Yaitu, untuk saat ini, saya sendiri (konten game sebagian besar akan ditulis).
Alasan saya menanyakan ini sekarang sebelum saya benar-benar memiliki sesuatu yang rapi adalah bahwa menambahkan kotak pasir sejak awal itu mudah, tetapi akan memaksakan pembatasan yang mengganggu pada diri saya juga. Namun jika saya pertama kali melanjutkannya dan kemudian memutuskan bahwa saya memang membutuhkan kotak pasir, saya akan mengalami masalah (saya harus menulis ulang skrip yang sudah ada di sana, atau memperkenalkan beberapa bentuk sistem manajemen kepercayaan yang tampaknya lebih banyak masalah daripada nilainya).
sumber
Jawaban:
Saya percaya bahwa baik pengembangan videogame, yang dalam setiap pengembangan perangkat lunak dari dimensi menengah-besar, programmer akan selalu mencoba untuk membuat pertukaran lapisan atau opsi set bebas untuk fungsionalitas masa depan.
Lua adalah bahasa yang memungkinkan opsi ini mudah diimplementasikan untuk pengguna akhir, dan untuk pengembang, tetapi itu tidak berarti mudah untuk merencanakan ruang kerja Anda, dengan pengalaman yang dapat saya sampaikan kepada Anda hari ini, juga perkalian sederhana dapat bocor, jika pengguna akhir diizinkan untuk menyesuaikan perilaku mereka.
Jika kita fokus pada apa yang ditawarkan gim pasir, kita bisa mewaspadai bahwa penggunaan akhir bisa berupa pisau ganda, memungkinkan gim menjadi non-linear, menarik dan menyenangkan , tetapi pada saat yang sama tidak mudah untuk merencanakannya. batas mereka di area kerja.
Dari sudut pandang keamanan, kedengarannya fantastis! lingkungan pengujian yang baik untuk ekstensi, harus diterapkan di semua jenis perangkat lunak.
sumber
Sebenarnya tidak terlalu sulit untuk membuat kotak pasir dasar dengan daftar putih fungsi dan kemudian menambahkan implementasi kustom dari fungsi yang berpotensi tidak aman. Pertanyaan SO ini sepertinya merupakan titik awal yang baik.
Saya pikir itu sudah cukup untuk mulai memberikan beberapa keamanan dasar: membatasi akses ke file di luar beberapa direktori khusus. Tidak ada yang namanya aplikasi 100% aman. Pikirkan apa yang bisa terjadi jika seseorang menulis beberapa ekstensi berbahaya: pengguna mungkin akan menyalahkan Anda sebagai pengembang. Jika Anda berencana memberi seseorang kesempatan untuk menulis ekstensi, pada akhirnya Anda akan membutuhkan keamanan. Jika hanya Anda - tidak apa-apa.
Inilah alasan mengapa Anda harus melakukan sandboxing dan itu bukan argumen yang valid terhadap sandboxing.
Saya memiliki beberapa pengalaman dalam pembuatan skrip permainan dan saya tidak merasa terganggu bekerja di lingkungan berpasir dengan sendirinya. Yang mengganggu saya adalah kurangnya fungsionalitas yang terkait dengan game, seperti API khusus objek dalam game atau implementasi yang buruk dari itu.
Mungkin membantu jika Anda melihat mesin LOVE sebagai contoh yang baik (jika Anda belum melakukannya), terutama tutorial tentang filesytem API .
sumber