AI 生成的代码怎么在前端安全预览 + 一键运行:sandbox iframe 实战 🔒

一句话:让 AI 生成的前端代码在页面里"一键运行"看效果,绝对不能直接 eval 或者塞进同源 iframe------那是把 XSS 大门给用户敞开。正确姿势是 sandbox iframe + srcdoc + 严格的 postMessage 通道。我做了个这样的预览器,把安全这块讲透。

场景

做了个 AI 写代码的小工具,用户描述需求,后端配在零代码智能体平台上的流程吐出一段 HTML/CSS/JS,前端要能立刻预览效果。问题来了:这段代码是 AI 生成的,等于不可信第三方代码,跑在我自己页面里风险极高。

第一道:sandbox 属性

iframe 的 sandbox 是核心。我给的配置:

ini 复制代码
<iframe
  sandbox="allow-scripts"
  srcdoc="<!-- 生成的代码 -->"
></iframe>

注意我只给了 allow-scripts ,死活没给 allow-same-origin。这俩一起给等于没沙箱------MDN 都警告了。只给 scripts 的话,iframe 里的代码能跑,但拿不到我主站的 cookie、localStorage、也访问不了父窗口的 DOM。它被关在一个独立的 origin 里。

代价是:iframe 里发 fetch 会因为没有 same-origin 各种受限,但预览场景本来也不该让它联网,正好。

第二道:srcdoc 而不是 src

我用 srcdoc 把代码直接当文档内容塞进去,不走 URL。这样不用起服务、不留临时文件,也避免了 blob URL 的一些泄漏问题。组装的时候把用户代码包进一个最小 HTML 骨架:

xml 复制代码
function buildDoc(html, css, js) {
  return `<!DOCTYPE html><html><head><style>${css}</style></head>
  <body>${html}<script>${js}</script></body></html>`
}

那个 </script> 的反斜杠别漏------不转义的话用户代码里如果有 </script> 字符串会提前闭合,整个文档就崩了。我第一次就栽这。

第三道:通信只走 postMessage 白名单

iframe 想把运行时的报错回传给我(显示在控制台面板),只能用 postMessage。接收端必须校验:

kotlin 复制代码
window.addEventListener('message', (e) => {
  if (e.origin !== 'null') return        // sandbox iframe 的 origin 是字符串 'null'
  if (e.data?.type !== 'console') return
  appendLog(e.data.payload)
})

sandbox 没给 same-origin 时,iframe 的 origin 是字面量 'null',这点挺反直觉,我对着 e.origin 打印了好几次才反应过来。

还有点没做好

  • 死循环防不住。用户(或 AI)写个 while(true),iframe 直接卡死,目前只能让用户手动点"重置"重建 iframe。想上 Web Worker + 超时 kill,还没动手。
  • CSP 我只在主站加了,iframe 内部没强制,有进一步收紧的空间。

模型这端

代码生成质量决定体验下限。我没自己折腾推理服务,直接用讯飞 MaaS(模型即服务)的接口出码,多模型可切,生成 + 效果测评在它平台里一站配齐,我前端只管安全地把结果跑起来。


你们跑不可信代码还有别的隔离手段吗?有人上 WebContainers 或者 QuickJS-wasm 的吗?评论区交流下,那个死循环 kill 我正缺方案。

相关推荐
KaMeidebaby3 小时前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
kyriewen4 小时前
我筛了 1400 个 Claude Code Skills,留下 5 个天天在用的
前端·ai编程·claude
JNX_SEMI4 小时前
AT2401C 2.4GHz 全集成射频前端单芯片技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
anOnion5 小时前
Agentic 前端开发之 实时显示 AI Agent 终端输出
前端·javascript·人工智能
随风一样自由5 小时前
【前端领域】2026最新前端领域全梳理(框架/工具/AI/跨端/底层标准/就业趋势)
前端·人工智能·前端框架
这是个栗子5 小时前
【前端性能优化】优化数据加载:用 Promise.all 从串行到并行
前端·javascript·性能优化·异步编程·前端优化·promise.all
fei_sun5 小时前
黑洞路由(Null Route/空接口路由)
服务器·前端·javascript
大爱一家盟6 小时前
告别卡点BGM同质化 2026原创卡点音乐素材下载网站 TOP5 推荐
大数据·前端·人工智能
彦为君6 小时前
算法思维与经典智力题
java·前端·redis·算法
aa小小6 小时前
localhost 访问异常排查笔记
前端