
不当输出处理
- 资料来源:
genai.owasp.org - 资料整理:韦胖
是什么意思?
AI 大模型生成的内容,如果不经过检查就直接交给其他系统使用,就可能引发安全问题。
举个例子:如果 AI 生成了一段 SQL 查询,你不加验证直接拿去数据库执行,攻击者就可以通过构造特殊输入,让 AI 生成恶意的数据库操作语句。这个问题与"过度依赖 AI"不同------这里关注的是 AI 输出的内容在被使用前没有经过安全检查。
因为用户能控制发给 AI 的内容,就能间接影响 AI 的输出,再进一步影响你的系统------相当于给了用户一个侧门。
可能导致的安全问题包括:
- 跨站脚本攻击(XSS):AI 输出的 JavaScript 在用户浏览器中运行
- 跨站请求伪造(CSRF)
- SQL 注入:AI 生成的查询语句破坏数据库
- 服务器端请求伪造(SSRF)
- 权限提升或远程代码执行
以下情况会加重风险:
- AI 被赋予的权限超出正常范围
- 系统存在间接提示词注入漏洞
- 第三方插件没有做输入校验
- 对不同场景(HTML / JavaScript / SQL)缺乏对应的输出编码
- 没有日志记录和监控
- 没有速率限制或异常检测
常见问题示例
- 把 AI 的输出直接交给系统执行(如
exec或eval),攻击者可以借此远程执行任意代码。 - AI 生成了含 JavaScript 的内容,浏览器直接运行,产生 XSS 攻击。
- 直接执行 AI 生成的 SQL 语句而没有用参数化查询,导致 SQL 注入。
- 用 AI 的输出来拼接文件路径,没有清理,导致路径穿越漏洞。
- 把 AI 生成的内容放进邮件模板没有转义,可能被用来发钓鱼邮件。
如何防范
- 把 AI 当普通用户来对待:不能因为内容是 AI 生成的就完全信任,要按照零信任原则对 AI 的输出做输入验证。
- 参考 OWASP 安全标准:按照 OWASP ASVS 的要求做好输入验证和内容清理。
- 对返回给用户的内容进行编码:防止浏览器意外执行 JavaScript 或 Markdown 中的代码。
- 根据使用场景选择编码方式:用于网页就做 HTML 编码,用于数据库就做 SQL 转义,不能混用。
- 数据库操作一律用参数化查询:不要把 AI 输出直接拼进 SQL 语句。
- 启用内容安全策略(CSP):限制浏览器能执行哪些脚本,减少 XSS 风险。
- 做好日志记录和监控:及时发现 AI 输出中的异常行为。
真实攻击场景
场景 1
某应用用 AI 生成聊天机器人的回复,AI 输出的内容未经验证直接传给扩展功能,导致扩展意外进入了维护模式。
场景 2
用户用 AI 工具总结网站内容,网站中藏有提示词注入指令,让 AI 把用户隐私数据悄悄发给攻击者控制的服务器。
场景 3
AI 被允许生成 SQL 查询语句,用户请求 AI 生成"删除所有表"的语句,系统未做任何审查直接执行,数据库被清空。
场景 4
Web 应用把 AI 生成的内容直接展示给用户,攻击者输入特殊提示,让 AI 输出包含恶意 JavaScript 的内容,访问页面的用户遭受 XSS 攻击。
场景 5
AI 生成邮件营销模板,攻击者操控 AI 在模板中嵌入恶意脚本,邮件客户端打开后触发 XSS。
场景 6
开发团队用 AI 生成代码,AI 推荐了一个根本不存在的依赖包名。攻击者提前在该包名下发布了含恶意代码的假包,开发者下载后系统被入侵。