S11.6: Dynamic import() in Page-Sandbox ausführen #67

Closed
opened 2026-06-18 15:53:16 +00:00 by Artur · 1 comment
Owner

Problembeschreibung

import() in Page-Scripts läuft in Bun's globalem Scope, nicht in unserem sandboxed with(_win)-Realm. Dadurch haben dynamic imports Zugriff auf Node-Globals.

Aktuell:

const mod = await import('./data:text/javascript,export const x = typeof process');
// mod.x → "object" statt "undefined"

Lösungsansatz

Option A: import() via Proxy wrappen — die importierte URL in einen data:-URL mit unserem Realm prefix umleiten.

Option B: import als void 0 blocken (wie require).

Option C: Aus Module-Importe via executeModule() in unserem Realm leiten.

Entscheidung: Option A/B hybrid — import als void 0 deklarieren für Sicherheit, plus Refactoring von executeModule() für zukünftige Sandboxing.

Akzeptanzkriterien

  • typeof import"undefined" (wird geblockt)
  • Module die via executeModule() laufen haben korrekten with(_win)-Scope
  • Bestehende Tests bleiben grün

Betroffene Dateien

Datei Änderung
src/js/execution-realm.ts var import = void 0;
src/js/execution-realm.ts executeModule() erhält with(_win)-Scope
tests/unit/sprint11-dynamic-import.test.ts Neuer Test

Risiken

  • var import ist ein reserviertes Wort → geht nicht (SyntaxError). Alternative: var _import = void 0;
  • import als Property auf _win setzen? _win.import = undefined; — dann via with(_win) geblockt
## Problembeschreibung `import()` in Page-Scripts läuft in Bun's globalem Scope, nicht in unserem sandboxed `with(_win)`-Realm. Dadurch haben dynamic imports Zugriff auf Node-Globals. **Aktuell:** ```javascript const mod = await import('./data:text/javascript,export const x = typeof process'); // mod.x → "object" statt "undefined" ``` ## Lösungsansatz **Option A:** `import()` via Proxy wrappen — die importierte URL in einen data:-URL mit unserem Realm prefix umleiten. **Option B:** `import` als `void 0` blocken (wie `require`). **Option C:** Aus Module-Importe via `executeModule()` in unserem Realm leiten. **Entscheidung:** Option A/B hybrid — `import` als `void 0` deklarieren für Sicherheit, plus Refactoring von `executeModule()` für zukünftige Sandboxing. ## Akzeptanzkriterien - [ ] `typeof import` → `"undefined"` (wird geblockt) - [ ] Module die via `executeModule()` laufen haben korrekten `with(_win)`-Scope - [ ] Bestehende Tests bleiben grün ## Betroffene Dateien | Datei | Änderung | |-------|----------| | `src/js/execution-realm.ts` | `var import = void 0;` | | `src/js/execution-realm.ts` | `executeModule()` erhält `with(_win)`-Scope | | `tests/unit/sprint11-dynamic-import.test.ts` | Neuer Test | ## Risiken - `var import` ist ein reserviertes Wort → geht nicht (SyntaxError). Alternative: `var _import = void 0;` - `import` als Property auf `_win` setzen? `_win.import = undefined;` — dann via `with(_win)` geblockt
Artur closed this issue 2026-06-18 17:03:38 +00:00
Author
Owner

Superseded by #71 — Sprint 15 implementiert Dynamic import() Sandbox mit var-Blockern und Export-Merging.

Superseded by #71 — Sprint 15 implementiert Dynamic import() Sandbox mit var-Blockern und Export-Merging.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
glow-all/true-headless-browser#67
No description provided.