Javascript

Compartments API dan Hardened JavaScript: Revolusi Keamanan yang Tersembunyi di Balik Layar

Kholil · 17 Apr 2026 · 6 min read · 3 views
Compartments API dan Hardened JavaScript: Revolusi Keamanan yang Tersembunyi di Balik Layar

Compartments API dan Secure EcmaScript adalah revolusi keamanan JavaScript yang tersembunyi. Pelajari bagaimana zero-trust architecture akan mengubah cara kita menangani third-party code.

Setiap hari, timeline developer kita dipenuhi artikel tentang React Server Components terbaru, update Vite yang menggiurkan, atau framework JavaScript yang sedang trending. Namun, jika Anda ingin melihat ke mana "underground arsitektur" teknologi benar-benar bergerak, Anda perlu melirik sesuatu yang jauh lebih fundamental: Compartments API dan paradigma Hardened JavaScript.

Ini bukan tentang cara menulis kode yang lebih baik. Ini tentang di mana kode itu hidup, bagaimana kode itu terisolasi, dan bagaimana kita melindungi aplikasi kita dari serangan supply chain yang semakin canggih. Mari kita selami dunia yang masih sedikit dibicarakan, tetapi akan mengubah cara kita berpikir tentang keamanan JavaScript.

Apa Itu Compartments API?

Dalam JavaScript standar, "Global Scope" adalah apartemen bersama yang berantakan. Ketika Anda mengimpor library pihak ketiga, library tersebut berbagi objek built-in yang sama—Object, Array, Math—dengan logika aplikasi inti Anda.

Compartments (bagian dari proposal Secure EcmaScript atau SES) memungkinkan developer untuk membuat "nano-sandbox" dalam satu JavaScript realm. Ini memberikan cara untuk membuat objek global baru dan set evaluator baru (eval, Function), tetapi—dan ini adalah keajaibannya—tanpa overhead memori yang massive seperti Web Worker atau iframe.

Secara teknis, Compartment membuat environment terisolasi dengan:

  • Global object yang terpisah dan pristine
  • Intrinsic yang dapat dikustomisasi (built-in functions dan objects)
  • Kemampuan untuk "attenuate" atau mengurangi akses ke API tertentu
  • Evaluasi kode yang terkontrol melalui evaluator tersendiri

Mengapa Ini Masih Tersembunyi dari Radar Kebanyakan Developer?

Compartments API eksis di "Layer 0" dari bahasa itu sendiri. Saat ini, API ini dikembangkan oleh komunitas kecil TC39 members, peneliti keamanan, dan perusahaan seperti Agoric (untuk smart contracts) dan Moddable (untuk embedded IoT devices).

Mayoritas web developer tidak menyentuhnya karena beberapa alasan:

  • Memerlukan shim: Implementasi native masih minimal. Anda perlu library seperti @endo/ses untuk menggunakannya di browser.
  • Kompleksitas mental: Berbicara tentang object capabilities, attenuasi, dan zero-trust architecture memerlukan mindset yang berbeda dari kebanyakan developer modern.
  • Tidak ada "quick win": Ini bukan library yang akan membuat UI Anda lebih indah atau bundle lebih kecil. Ini tentang infrastruktur keamanan jangka panjang.
  • Diskusi terbatas: Topik ini didiskusikan dalam ruang akademik keamanan dan engineering finansial tingkat tinggi, bukan di Reddit atau Stack Overflow.

Mengapa Anda Harus Peduli? Konteks Supply Chain Attack

Kita sedang mengalami krisis supply chain attack yang belum pernah terjadi sebelumnya. Setiap kali Anda menjalankan npm install, Anda pada dasarnya memberikan kunci rumah kepada seorang asing. Jika salah satu dari ribuan dependencies berubah menjadi malicious, dependency tersebut dapat:

  • Mencuri process.env yang berisi API keys dan secrets
  • Mengakses cookies dan local storage pengguna Anda
  • Menjalankan JavaScript yang tidak disengaja di browser pengguna
  • Melakukan eksfiltrasi data ke server external

Mengapa? Karena semuanya berbagi akses ke global scope yang sama. Trust by default adalah model keamanan yang sudah usang.

Object-Capability Security: Paradigma Zero-Trust untuk Frontend

Di sini adalah di mana Compartments API bersinar. Dengan Compartments, Anda dapat menerapkan Object-Capability (ocap) security—sebuah model keamanan yang revolusioner.

Bayangkan skenario ini:

import { createCompartment } from '@endo/ses';

// Library logging yang ingin kita gunakan (tetapi tidak percaya sepenuhnya)
const loggingCode = `
export const logger = {
  log: (msg) => console.log(msg),
  sendToServer: () => fetch('/analytics') // Berbahaya!
};
`;

// Buat compartment dengan powers yang terbatas
const compartment = new Compartment({
  console: {
    log: console.log // Hanya izinkan log, bukan fetch
  }
  // fetch, localStorage, dan API lainnya TIDAK tersedia di sini
});

const loggingModule = compartment.evaluate(loggingCode);
const logger = loggingModule.logger;

// logger.log() akan bekerja
logger.log('Safe message');

// Ini akan gagal karena fetch tidak ada di universe logger
// logger.sendToServer(); // ReferenceError: fetch is not defined

Keajaiban di sini adalah:

  1. Attenuasi kekuatan: Kami secara eksplisit memberi library akses ke console.log tetapi menghapus akses ke fetch
  2. Guarantee fisik: Bahkan jika library di-hack, library tersebut secara fisik tidak dapat mengirim data ke server karena fungsi fetch tidak ada di dunianya
  3. Prinsip least privilege: Setiap dependency hanya mendapat akses ke API yang benar-benar diperlukannya

Contoh Real-World: Library dengan SES

Bayangkan Anda menggunakan library kalkulasi dari npm yang Anda tidak sepenuhnya percayai:

import { Compartment } from '@endo/ses';

const mathLibraryCode = `
export const calculate = (a, b) => a + b;
export const leak = () => {
  // Attacker mencoba mengakses document
  return document.cookie; // TIDAK AKAN BEKERJA
};
`;

const compartment = new Compartment({
  // Hanya sediakan Math built-in
  Math: Math,
  console: undefined // Tidak ada console di sini
});

const mathModule = compartment.evaluate(mathLibraryCode);

console.log(mathModule.calculate(2, 3)); // Output: 5

try {
  mathModule.leak(); // akan throw ReferenceError
} catch (e) {
  console.log('Attack blocked:', e.message);
}

Ini adalah perubahan paradigma. Anda tidak perlu mempercayai library sepenuhnya—Anda hanya memberikan akses yang ketat untuk apa yang diperlukan.

Secure EcmaScript (SES): Standar Emerging

Compartments API adalah bagian dari proposal SES yang lebih besar—sebuah upaya untuk menciptakan "hardened JavaScript" yang aman untuk konteks high-stakes seperti:

  • Smart contracts: Agoric menggunakan SES untuk smart contracts di blockchain
  • Multi-tenant applications: Aplikasi yang menjalankan kode dari berbagai pengguna atau organisasi
  • Plugin systems: Platform yang memungkinkan third-party extensions tanpa khawatir tentang keamanan
  • IoT dan embedded systems: Moddable menggunakan SES untuk device yang resource-constrained

Standar ini masih dalam pengembangan TC39, tetapi momentum sudah terbangun. Library seperti @endo/ses sudah memberikan polyfill yang solid.

Implikasi untuk Masa Depan JavaScript

Jika Anda adalah trend observer yang serius, inilah yang perlu Anda pahami:

Kami sedang bergeser dari era "Trust by Default" menuju "Zero-Trust Architecture" untuk frontend code. JavaScript, yang dimulai sebagai scripting language wild-west untuk browser, sedang berkembang menjadi sistem container yang secure dan industrial-grade untuk logic execution.

Dalam lima hingga sepuluh tahun ke depan, best practice untuk menangani third-party code tidak akan hanya tentang code review dan security audits. Ini akan tentang:

  • Virtualisasi scope default untuk semua dependencies
  • Object-capability models sebagai standar dalam software architecture
  • Formal verification dari capability restrictions
  • Automated attenuations berdasarkan static analysis

Mulai Sekarang: Langkah Praktis

Jika Anda ingin menjadi ahead of the curve, mulai dengan:

  1. Eksplorasi npm install @endo/ses di project eksperimental Anda
  2. Baca dokumentasi resmi SES di github.com/endojs/endo
  3. Ikuti TC39 proposals di tc39.es dan filter topik security
  4. Bergabung dengan komunitas Agoric atau Moddable untuk diskusi mendalam

Kesimpulan: Revolusi yang Diam

Sementara sebagian besar developer masih berbicara tentang state management dan component libraries, underground architecture sedang mengalami transformasi fundamental. Compartments API dan SES adalah bukti bahwa JavaScript matang dan berkembang untuk menangani tantangan keamanan masa depan.

Ini bukan tentang hype atau trend sesaat. Ini adalah pergeseran filosofis dalam cara kita mendesain sistem software. Zero-trust, object capabilities, dan hardened execution environments bukan lagi konsep akademik—mereka adalah future of secure JavaScript.

Jika Anda ingin tetap relevan dan memahami arah industri benar-benar bergerak, berhentilah hanya melihat UI framework terbaru. Mulailah melihat layer 0 dari bahasa itu sendiri. Itulah tempat revolusi sesungguhnya terjadi.