Model Keamanan
nuforge dirancang untuk mengevaluasi ekspresi halaman yang ditulis dalam DSL-nya secara aman. Proteksinya berupa pertahanan berlapis (defense-in-depth) pada lapisan data: alih-alih bergantung pada satu gerbang saja, beberapa penjaga independen ditumpuk sehingga sebuah ekspresi harus melewati semuanya sebelum dapat dijalankan.
Daftar izin AST
Parser hanya menerima subset node ekspresi yang aman: literal, identifier, akses anggota (member access), array, objek, operator binary/logical/unary, ekspresi kondisional, pemanggilan fungsi, arrow function, dan template literal. Apa pun di luar subset itu ditolak pada waktu parse, sebelum evaluasi dimulai.
Secara spesifik, parser menolak operator new, ekspresi function, this, typeof, delete, operator strict-equality (gunakan ==/!=), operator ++/--, urutan koma (comma sequences), tagged template, dan statement sembarang. Karena hal-hal ini ditangkap saat parse, ekspresi yang tidak valid tidak pernah mencapai runtime.
Penjaga akses properti
Akses ke constructor, __proto__, dan prototype diblokir baik pada member access maupun pada kunci objek. Blokir ini berlaku pada waktu parse DAN selama evaluasi, yang menutup celah prototype-chain escape yang jika tidak akan membiarkan sebuah ekspresi keluar dari lapisan data.
Berikut perbandingan kecil antara ekspresi yang diterima dan yang ditolak:
{user.name} // ok
{items.length > 0} // ok
{new Date()} // rejected: `new` is not allowed
{obj.constructor} // rejected: property guard
Penjaga rekursi / DoS
Evaluasi menerapkan kedalaman rekursi maksimum. Dengan demikian ekspresi yang berbahaya atau liar tidak dapat menghabiskan call stack, sehingga satu ekspresi buruk tidak dapat menjatuhkan runtime.
State host yang dibekukan
State eksternal dibekukan secara mendalam (deep-frozen) sebelum diserahkan ke DSL. Akibatnya, ekspresi DSL hanya dapat membaca state host dan tidak pernah mengubahnya. Lihat halaman externals untuk cara state host disediakan.
Keamanan rendering
<script>ditolak oleh parser dan tidak pernah di-render mentah, jadi konten DSL tak bisa mengeksekusi JavaScript sembarang.dangerouslySetInnerHTMLdibuang oleh renderer React dan oleh ekspor kode, jadi halaman tak bisa menyuntik HTML mentah.- Atribut URL disanitasi pada ekspor statis (
toHtml): URLjavascript:/vbscript:/data:text/htmldibuang. (Renderer React sudah menetralkan URLjavascript:saat runtime.)
Kolaborasi & penulisan
AST kolaboratif yang masuk divalidasi terhadap skema sebelum digabungkan, sehingga dokumen yang cacat atau jahat tidak dapat melewati penjaga parser dengan datang melalui jaringan. Penulisan internal menggunakan guarded assignment yang mencegah prototype pollution.
Bukan sandbox penuh
Ini adalah pertahanan berlapis pada lapisan data, BUKAN sandbox VM penuh. Untuk konten pihak ketiga yang sepenuhnya tidak tepercaya, tambahkan batas ekstra, misalnya sandbox QuickJS atau iframe, pada titik ekstensi Anda.