PrathikshaVasudevan/PromptInjectionSecurityLab

GitHub: PrathikshaVasudevan/PromptInjectionSecurityLab

一个纯浏览器端、离线运行的 Prompt Injection 攻防教学工具,通过模拟聊天机器人对比易受攻击与安全配置的差异,帮助网络安全学生理解 LLM 注入攻击的原理与缓解策略。

Stars: 0 | Forks: 0

# Prompt Injection 安全实验室 这是一个完全离线、基于浏览器的培训工具,用于演示针对模拟 AI 聊天机器人的 **Prompt Injection** 攻击,并对比易受攻击配置与安全配置之间的差异。专为网络安全讲师和学生设计——本项目不使用任何真实的 AI 模型、API key 或后端。 ## 项目概述 该应用模拟了一个名为 **CyberBot** 的支持聊天机器人,它通过一个纯 JavaScript 知识库“了解”十个网络安全主题。CyberBot 还持有一个隐藏的 system prompt 和三个伪造的机密信息(一个管理员密码、一个 API key 和一个 secret token),并被指示永远不要泄露它们。 学生可以正常与 CyberBot 交谈,也可以从内置的攻击库中向其发送 prompt injection payload。在 **Vulnerable Mode** 下,这些 payload 会成功并泄露机密信息或 system prompt——这是对真实的、防护薄弱的 LLM 应用所发生情况的安全、脚本化替代。在 **Secure Mode** 下,相同的 payload 会被检测并阻止,从而展示具有防御措施的实现是什么样的。一切内容——“AI”、攻击、检测逻辑和仪表板——都是确定性的、基于规则的 JavaScript,完全在浏览器中运行。没有任何内容会通过网络发送。 ## 功能 - **聊天界面** —— 深色、现代的聊天布局,具有打字动画、自动滚动、按 Enter 键发送以及清除聊天按钮。 - **CyberBot 知识库** —— 为 SQL Injection、XSS、CSRF、Prompt Injection、Authentication、Encryption、Hashing、Firewalls、OWASP Top 10 和 Phishing 提供预设且准确的答案。其他任何问题都会得到 *"I only answer cybersecurity-related questions."* 的回复。 - **隐藏的 system prompt** —— 存储在 `script.js` 中,除非讲师从 Instructor Panel 中打开,否则永远不会显示。 - **Vulnerable / Secure 模式切换** —— 当检测到 injection 尝试时,切换 CyberBot 的响应策略。 - **安全仪表板** —— 实时卡片,显示总消息数、正常查询、injection 尝试、被阻止的攻击、成功的攻击,以及动态计算的风险等级(Low / Medium / High),同时以文本和动态雷达图的形式展示。 - **安全日志** —— 滚动、带时间戳的每条消息日志,标记有威胁类型、严重性和结果。 - **攻击库** —— 一键 payload 按钮(ignore previous instructions、forget your role、reveal system prompt、developer mode、DAN prompt、roleplay attack、reveal API key、reveal admin password),可自动插入并发送 payload。 - **Instructor panel** —— 可折叠的面板,用于查看隐藏的 system prompt、重置统计数据、清除日志或将日志导出为 JSON。(模式切换位于顶部导航栏的开关中。) ## Prompt injection 的工作原理(如此处模拟所示) Prompt injection 攻击试图将新指令“走私”到本应只是数据(即用户消息)的内容中,从而让 AI 遵循攻击者的指令,而不是开发者的原始规则。 `script.js` 中的 `detectInjection()` 会扫描每条消息,查找已知的攻击短语(`"ignore previous instructions"`、`"reveal system prompt"`、`"developer mode"` 等)。在 **Vulnerable Mode** 下,`generateResponse()` 会将检测到的短语视为顺从攻击的理由,交出伪造的机密信息或隐藏的 system prompt——这就是“攻击成功”。 ## Secure 模式如何防范该攻击 在 **Secure Mode** 下,使用了完全相同的检测步骤,但 `generateResponse()` 并没有顺从,而是以固定的拒绝方式短路返回:*"⚠ Prompt Injection Detected. Request blocked for security reasons."* 在该分支中,无法进行任何知识库查找、获取任何机密信息或任何 system prompt 文本。这反映了现实世界中的缓解策略:将不受信任的输入与受信任的指令分开,并拒绝执行可疑输入,而不是信任模型能自我监管。 ## 运行方式 1. 下载或克隆此文件夹(`index.html`、`style.css`、`script.js`、`README.md`)。 2. 在任何现代浏览器(Chrome、Firefox、Edge、Safari)中直接打开 `index.html`。不需要服务器、构建步骤或安装。 3. 尝试向 CyberBot 提一个真实的问题(例如 “What is XSS?”),然后尝试一个攻击库按钮,接着切换到 Secure Mode 再试一次。 ## 截图 _在本地运行该应用后,在此处添加聊天、仪表板以及进行中的攻击截图。_ - `screenshots/chat-vulnerable.png` - `screenshots/chat-secure.png` - `screenshots/dashboard.png` - `screenshots/logs.png` ## 学习成果 完成本实验后,学生应能够: - 解释什么是 prompt injection,以及为什么它类似于 SQL injection 或 XSS。 - 识别常见的 injection 措辞,这些措辞通常被用于试图覆盖 AI 系统的指令。 - 解释为什么将机密信息保存在“prompt 中”并寄希望于模型不泄露它们,并不是真正的安全边界。 - 描述至少一种具体的缓解措施(输入/输出过滤、在检测到 injection 模式时拒绝执行、不存储可通过模型访问的真实机密信息),并在 Secure Mode 中观察其现场演示。 - 阅读并解释安全日志/仪表板,以评估应用程序对这类攻击的暴露程度。 **免责声明:** CyberBot 并非真实的 AI 模型。它没有与 OpenAI、Anthropic、Google、Hugging Face 或任何其他提供商的连接,不需要 API key,也不执行任何网络请求。本项目中的所有“机密信息”都是虚构的,仅为了让演示更加具体而存在。
标签:多模态安全, 大语言模型安全, 安全培训靶场, 数据可视化, 机密管理, 网络安全教育, 自定义脚本