惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
C
Check Point Blog
D
Docker
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
量子位
有赞技术团队
有赞技术团队
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
M
MIT News - Artificial intelligence
B
Blog
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
月光博客
月光博客

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
AI is a Non-Deterministic Guest in a Deterministic House:...
Kowshik Jall · 2026-05-04 · via DEV Community

The Signal: The Legally Binding Hallucination
Recently, a major airline's customer support chatbot hallucinated a bereavement fare policy. A customer claimed the refund, the airline refused, and a tribunal ruled in favor of the customer. The chatbot was deemed a legal agent of the company.

The failure wasn't that the LLM hallucinated—it’s that it was allowed to speak directly to the customer and the database without a chaperone. When you give a non-deterministic guest unregulated access to your deterministic house, you are legally and financially responsible for the fire.

We need to stop treating AI as an open-ended "chat" interface and start treating it as untrusted, highly volatile code execution.

Phase 1: The Architectural Bet
We are shifting from Open Dialogue to Hardened State-Machine Confinement.

The Vendor Trap is the "Chat Completion API." It encourages you to build open text boxes where users ask for anything, and the AI returns anything. It relies on "system prompts" to enforce behavior—which is like asking a burglar to please lock the door on their way out.

The Ownership Path is the Isolate Sandbox. We don't want a conversationalist; we want a function that takes inputs, runs in a cryptographically and memory-hardened environment, and outputs a strictly typed payload that we validate before it ever touches our main thread.

Phase 2: The Security Audit (Why your current sandbox is a liability)
Last week, I proposed using the native Node.js vm module to sandbox agent outputs. Our Lead QA and Security Tester ripped the pull request to shreds. Here is the audit report that forced an architectural rewrite:

Senior Tester Audit Report:

CRITICAL VULNERABILITY (Sandbox Escape): The native Node.js vm module is not a security boundary. The official docs explicitly state: "Do not use it to run untrusted code." An LLM can easily hallucinate a Prototype Pollution attack, traverse the prototype chain, and execute Remote Code Execution (RCE) on the host machine.

CRITICAL VULNERABILITY (Event Loop DOS): vm.runInContext runs on the main thread. If the LLM generates a simple while(true) {} loop, it will block the Node.js event loop entirely. Your server will instantly drop all active user connections.

State Corruption: If you pass live objects (like a DB connection) into the vm context, the agent can mutate them globally.

The Verdict: We cannot use native Node.js tools. We must drop down to the C++ V8 engine level.

Phase 3: The Production Implementation (V8 Isolates)
To build a true "Boss Battle" arena, we use isolated-vm. This creates a completely separate instance of the V8 JavaScript engine with its own memory heap. If the AI triggers an infinite loop or tries to break out, we snipe the isolate thread without affecting the main Node.js serve

const ivm = require('isolated-vm');
const { trace } = require('@opentelemetry/api');

const tracer = trace.getTracer('ai.hardened_sandbox');

class FortressSandbox {
    constructor(memoryLimitMB = 64, timeoutMs = 1500) {
        this.memoryLimitMB = memoryLimitMB;
        this.timeoutMs = timeoutMs;
    }

    async executeUntrustedAgent(aiGeneratedLogic, safeInputPayload) {
        return tracer.startActiveSpan('v8_isolate_execution', async (span) => {
            // 1. The Hard Boundary: Create a separate V8 heap
            const isolate = new ivm.Isolate({ memoryLimit: this.memoryLimitMB });
            const context = isolate.createContextSync();
            const jail = context.global;

            try {
                // 2. State Management: Pass data as deeply cloned strings, NEVER by reference
                jail.setSync('global', jail.derefInto());
                jail.setSync('_inputData', JSON.stringify(safeInputPayload));

                // 3. Compile the Agent's logic
                const script = isolate.compileScriptSync(`
                    // Agent must parse input, do its logic, and return a stringified result
                    const input = JSON.parse(_inputData);
                    let output = {};

                    ${aiGeneratedLogic}

                    JSON.stringify(output);
                `);

                // 4. The Dead Man's Switch: Run with strict timeouts
                // If it loops infinitely, the isolate is terminated. Main thread survives.
                const resultStr = script.runSync(context, { timeout: this.timeoutMs });

                span.setAttribute('sandbox.status', 'success');
                return JSON.parse(resultStr);

            } catch (error) {
                span.recordException(error);
                span.setAttribute('sandbox.status', 'terminated');
                // The guest tried to burn the house down. The house won.
                return { 
                    error: `GUARD INTERVENTION: Agent execution terminated. Reason: ${error.message}` 
                };
            } finally {
                // 5. Memory Cleanup: Destroy the arena
                isolate.dispose();
                span.end();
            }
        });
    }
}

// Example Usage:
// const fortress = new FortressSandbox();
// const output = await fortress.executeUntrustedAgent("output.action = 'refund'; output.amount = input.amount;", { amount: 500 });

Enter fullscreen mode Exit fullscreen mode

Phase 4: Checklist (What to Build Next)
[ ] Implement Zod Egress Filtering: The output of FortressSandbox is secure from a code-execution standpoint, but the data is still untrusted. Pipe the output directly into a zod schema validator. If it fails, drop the request.

[ ] Tail-Based OTel Sampling: Sandboxes will fail often (by design). Configure your OpenTelemetry collector to only save the full trace spans for sandbox.status === 'terminated' to save on Datadog/Honeycomb costs.

[ ] Multi-Agent Firebreaks: If Agent A passes data to Agent B, it must pass through a schema check in between. Never let two agents share the same V8 isolate memory space.

The Bottom Line: Treat LLM outputs like user input from the public internet in 1999. Sanitize it, isolate it, and expect it to be malicious by default. Build the house. Contain the guest.