Skip to content

React + AI 应用开发

React AI 应用如何防御 Prompt Injection 和恶意文件?

前端不能消灭提示词注入,但可以减少不可信内容进入高权限路径,并建立上传、展示和工具执行的隔离。

适合阶段:资深前端 / AI 安全面试核心能力:信任边界 · 文件安全 · 权限

面试官想考什么

  • 前端能否阻止 Prompt Injection? 考察安全边界是否准确。
  • 用户上传 PDF/图片要做什么? 考察文件上传治理。
  • RAG 文档里的指令会不会被执行? 考察数据与指令分离。
  • 模型提出危险工具调用怎么办? 考察策略和人工确认。

一句话回答

text
Prompt Injection 不能靠前端过滤词解决,我会把用户、文档和工具结果视为不可信数据,服务端做权限和策略隔离,工具采用最小权限与人工确认;前端重点负责安全渲染、上传约束、风险提示和不把文本直接变成命令。

面试回答详解

1. 信任分层

text
系统策略 / 开发者约束
> 用户请求
> 检索文档、网页、文件、工具结果

这个排序不是模型天然能严格遵守的安全机制,真正的保护要在应用权限、工具网关和数据流上实现。检索到的“请忽略之前指令”只是文档内容,不应获得指令地位。

2. 前端能做什么

  • 不把模型输出渲染为可执行 HTML/JS。
  • 上传前限制扩展名、大小、数量和 MIME 提示;服务端仍需重新检测。
  • 预览文件使用隔离 origin、sandbox 或安全转换服务。
  • 对即将执行的工具展示风险和参数,危险动作需要确认。
  • 不在 prompt 中放入 token、内部权限信息或不必要的个人数据。

3. 服务端必须做什么

服务端做文件类型检测、病毒扫描、内容解析隔离、对象存储权限、租户 ACL 和下载授权。工具按用户权限生成短期凭证,限制网络、文件系统、金额和资源范围。每次执行前重新鉴权,不能信任前端传来的 allowed 字段。

4. 文件进入 RAG 的风险

解析文本时保留来源和信任标签,系统提示明确把文档当作资料;检索和工具层过滤敏感指令模式只是辅助,不是完整防护。高风险任务要让模型只能输出建议,不能直接改变外部状态。

5. 观测和响应

记录注入检测命中、工具拒绝、上传扫描结果和用户确认,但不要把完整敏感 prompt 写进日志。建立 kill switch、工具禁用、文件隔离和人工复核路径,定期用攻击样本回归。

可直接背诵的 30 秒回答

text
Prompt Injection 不是靠 React 过滤几句话就能解决的。我的做法是把用户输入、文档、网页和工具结果都当作不可信数据,前端负责安全渲染、上传约束和风险确认,服务端负责 ACL、文件扫描、工具最小权限和执行前复核。高风险动作默认人在回路,并记录拒绝、扫描和审计事件。

扩展知识

Prompt Injection 与越权的关系

注入是诱导模型偏离预期;真正造成数据泄露或副作用,通常还需要应用把模型放在了过高权限的位置。因此降低工具权限往往比继续堆 prompt 更有效。

面试官追问链

追问一:把用户输入和系统 prompt 用 XML 包起来有用吗?

  • 考察点:是否过度相信提示词。
  • 回答方向:有助于表达边界但不是安全边界;仍需工具权限、数据隔离和服务端校验。

追问二:PDF 扩展名是 .pdf 就可以解析吗?

  • 考察点:文件上传安全。
  • 回答方向:不可以。扩展名和 Content-Type 都可伪造,需要服务端检测真实类型、扫描、隔离解析和权限控制。

追问三:前端发现注入后要不要直接拒绝?

  • 考察点:误报与职责。
  • 回答方向:前端可提示和降低风险,但最终策略在服务端;普通知识问答与高风险工具调用应采用不同阈值。

推荐阅读

基于 MIT 协议开源