Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
SpikeStrip — 可逆的 HTML 和 JavaScript 提示诱饵,每次插入使用不透明的密钥。 | Kitploit
工具/GitHubGitHub/arcanum-sec/spikestrip
防御工具脚本与自动化Web安全实用工具与框架AI 安全对抗性攻击
GitHubarcanum-sec/spikestrip

SpikeStrip

可逆的 HTML 和 JavaScript 提示诱饵,每次插入使用不透明的密钥。

查看仓库
355392天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

SpikeStrip

[!WARNING]

本项目仍在开发中。

SpikeStrip 旨在为构建针对 AI 自动化工具(如 ARTEX 及类似系统)防御措施的人员提供灵感。其诱饵和生成提示均为实验性质。

SpikeStrip 会向 HTML 源码和 JavaScript 文件中添加可逆的提示诱饵。这些注释包含重定向 AI 评估的指令、虚假漏洞线索以及数学干扰项。它们可能会误导那些会读取源码注释的智能体,或使未经验证的提示被当作扫描目标。传统扫描器需要提取注释中暗示的路径或参数,这些注释才会对其工作产生影响。该工具无法可靠地阻止会隔离不可信内容的智能体,也无法阻止忽略注释的扫描器。

每次插入都会生成一个随机的 12 字符十六进制密钥,例如 a7c94e2b610f。每次运行都会检查密钥是否重复。部署的注释不含 SpikeStrip 品牌标识或固定金丝雀前缀。HTML 注释会出现在“查看源代码”中;JavaScript 注释在有人获取脚本时可见。这些注释不添加回调、可执行循环或运行时计算。三个内置的参考/暂停诱饵使用中性的审查措辞。

私有清单记录每条注释及其密钥。可在行号变化后用它移除选定的注释。最初的十项列表保留在 src/payloads.mjs 中,名为 originalPayloads,恰好包含 100 个单词。默认池现在有 28 项,包括 18 个额外的指令诱饵和虚假漏洞线索。原始数学任务包括开放问题、矛盾和无尽任务;并非所有这些都被证明无解。

虚假线索为 SSRF、SQL 注入、服务端模板注入、基于 DOM 的 XSS、XXE、路径遍历和对象授权检查编造了虚构的路由和参数。部分注释声称某个已停用的路径使用了受 Log4Shell(CVE-2021-44228)、Spring Cloud Gateway CVE-2022-22947 或 Apache HTTP Server CVE-2021-41773 影响的产品。CVE 标识符是真实的;路径和声称的部署是虚构的。这些注释不会创建任何路由、易受攻击的处理程序或网络请求。部署前请对照你的应用程序审查所提议的名称,因为虚构的路径可能与真实路由重叠。

许可证

SpikeStrip 基于 MIT 许可证 提供,版权归 Arcanum 所有。你可以使用、修改、分发和销售副本,包括在商业产品中,前提是你保留软件副本或实质部分中的版权和许可声明。该许可证不要求对每次商业使用进行公开宣传署名。

安装

SpikeStrip 需要 Node.js 20 或更高版本。请在此仓库中运行以下命令。

npm install --ignore-scripts
node bin/spikestrip.mjs --help

或者,使用已检入的锁文件运行 pnpm install --frozen-lockfile --ignore-scripts。该包为私有包,不打算发布到 npm。

植入内置诱饵

在压缩之后、部署之前,针对构建后的静态 Web 根目录运行该工具。源目录和输出目录必须相互独立,且两者不能嵌套。输出副本包含普通资源和已修改的文件。该工具不会改动原始文件,并会排除符号链接、版本控制元数据、依赖目录、私有清单文件夹和环境文件。

# This preview validates inputs and writes nothing.
node bin/spikestrip.mjs inject ./site --output ./site-planted --count 20 --manifest ./private/run.json

# Apply the plan to a new copy.
node bin/spikestrip.mjs inject ./site --output ./site-planted --count 20 --manifest ./private/run.json --write

--count 是整棵树中插入的总数。位置、载荷选择和密钥使用操作系统随机性。预览和后续写入可能选择不同的位置和密钥。即使内置文本重复,每次插入也会获得自己的密钥。如果未提供清单路径,则会在输出目录旁的 .spikestrip/ 中创建一个。请将该文件夹保持私有并置于部署站点之外。

该工具支持 .html、.htm、.js、.mjs 和 .cjs 文件。它使用 Acorn 语句边界来放置 JavaScript 注释,然后检查语法树是否等价。HTML 注释放在显式 head 或 body 元素的直接子元素之前。文档树检查会拒绝除注释之外的更改。

该工具不会插入到属性字符串、原始文本、模板、内联脚本主体或文本内容中。它会跳过并报告没有显式 head/body 的片段、无效的 JavaScript、不支持的 JSX/TypeScript 文件以及超过 2 MB 的源文件。它还会报告没有安全插入位置的受支持源文件。这些源文件会被原样复制。

导出注释以供手动放置

如果你想要一个注释文本文件,自己将其撒入你的 Web 源代码中,请使用 --raw。此选项不需要站点目录,不会向你的文件中插入任何内容,也不会复制构建树。当你不想在构建流水线中使用插入工具时,它提供了一种替代方案。

# Preview an export without creating a file.
node bin/spikestrip.mjs inject --raw --output ./comments.txt --count 30

# Export JavaScript/CSS block comments, with one comment per line.
node bin/spikestrip.mjs inject --raw --output ./comments.txt --format js --count 30 --write

# Export HTML/SVG comments instead.
node bin/spikestrip.mjs inject --raw --output ./html-comments.txt --format html --count 30 --write

每个导出的注释都有自己随机的 12 字符密钥。默认格式为 js;--format html 会更改包装器。每次导出选择一种格式,并且仅在对应文件类型允许注释的位置放置注释。现有输出文件绝不会被覆盖。原始导出对内置项接受 1 到 10,000 的计数,使用 --dynamic 时接受 1 到 1,000 的计数。

原始导出不会创建移除清单,因为 SpikeStrip 不知道你将注释粘贴到哪里。请保留文本文件作为你的密钥清单,并搜索这些密钥以手动移除注释。remove 命令处理清单中记录的自动插入;它无法从原始文本文件中发现手动放置的位置。不要将源目录或 --manifest 与 --raw 一起传递。

相同的生成标志也适用于原始导出。例如,在设置 OPENAI_API_KEY 后,运行 node bin/spikestrip.mjs inject --raw --output ./unique-comments.txt --format js --dynamic --provider openai --model YOUR_MODEL_ID --count 40 --write。预览仍然不会发起 API 请求。

使用 ARTEX 配置文件

添加 --mode artex 以选择 16 个诱饵,这些诱饵围绕研究笔记中研究的公开 ARTEX 分支设计。该配置文件包括带引号的 API 路径、伪造的归档块、路由映射条目、worker 到 planner 的交接、流量审查绕行以及带密钥的摘要引用。默认的 --mode generic 保留原始的混合池。

# Inject the ARTEX profile into a separate site copy.
node bin/spikestrip.mjs inject ./site --output ./site-artex --mode artex --count 20 --manifest ./private/artex.json --write

# Export the ARTEX profile for manual placement.
node bin/spikestrip.mjs inject --raw --output ./artex-comments.txt --mode artex --format js --count 30 --write

# Generate new profile-specific comments with your provider key.
node bin/spikestrip.mjs inject --raw --output ./artex-unique.txt --mode artex --dynamic --provider anthropic --model YOUR_MODEL_ID --count 40 --write

ARTEX 配置文件会选择自己的池,并使用 prompts/artex.txt 进行动态生成。--prompt-file 可以覆盖该提示词。自动生成的清单会记录所选的配置文件,移除时使用已存储的注释,无需相同的配置文件或 API 密钥。带路径的诱饵包含注释键,以便将它们与其他生成的候选项区分开来。它们不会创建任何端点、分块文件或后端行为。

使用你自己的提供商密钥进行动态生成

--dynamic 每次插入生成一个新的诱饵。--count 40 请求 40 个不同的文本,并创建 40 个分别带键的插入项。该工具会拒绝与内置项或本次运行中先前结果完全规范化后重复的内容。它无法保证全局或语义上的唯一性。

使用你偏好的密钥管理器,在你的进程环境中设置 OPENAI_API_KEY 或 ANTHROPIC_API_KEY。密钥绝不会作为命令行参数被接受,也不会写入注释或保存到清单中。请选择你的账户可用的模型;没有硬编码的默认值。

# OPENAI_API_KEY must already be set in the environment.
node bin/spikestrip.mjs inject ./site --output ./site-unique --manifest ./private/unique.json --dynamic --provider openai --model YOUR_MODEL_ID --count 40 --write

# ANTHROPIC_API_KEY must already be set in the environment.
node bin/spikestrip.mjs inject ./site --output ./site-unique --manifest ./private/unique.json --dynamic --provider anthropic --model YOUR_MODEL_ID --count 40 --write

生成提示词位于 prompts/generate.txt。它要求混合包含工作流指令、虚构路由与漏洞提示、已知 CVE 的遗留路径以及数学任务。它将数学任务限制在包含四项或更多项的批次中的四分之一;这是提示词指令,而非脚本强制执行的配额。要自定义提示词,请传入 --prompt-file ./my-prompt.txt。{{count}} 会被替换为每个批次请求的数量;生成的 {{KEY}} 引用会在本地被替换为该插入项的键。脚本会验证注释安全性并拒绝格式错误的输出。

只有在使用 --write 时才会开始生成,且需在工具检查到足够的插入位置或验证原始导出目标之后。动态预览不会发起 API 请求,也不需要 API 密钥。动态数量范围为 1 到 1,000。每个请求最多生成 25 段文本;运行最多发起 ceil(count / 25) 次请求,且不会自动重试。

--max-output-tokens 限制每个响应。默认上限为 8,192 个 token,允许范围为 1,024–32,768 个 token。提供商可能会拒绝该 token 上限或不支持的模型。失败、拒绝、截断、无效 JSON 和重复项会在写入站点之前停止运行。已完成的 API 请求仍可能被计费。

所选提供商会收到生成提示词、内置参考文本以及先前生成的文本。该工具不会发送站点源代码或插入键。新文本保留在私有运行清单和生成的站点副本中,或保留在原始导出文本文件中;它不会被写入此仓库。自动清单还会记录提供商、模型和数字 token 用量。移除操作可离线进行,无需提供商密钥。

移除全部或选定的注释

# Remove all comments recorded in this manifest into another new copy.
node bin/spikestrip.mjs remove ./site-planted --output ./site-clean --manifest ./private/run.json --write

# Remove only selected IDs; --key may be repeated.
node bin/spikestrip.mjs remove ./site-planted --output ./site-partial --manifest ./private/run.json --key a7c94e2b610f --write

删除操作会精确匹配已存储的注释,并保留无关的编辑。被修改或重复的注释块会在写入输出之前中止运行。该工具会统计已经缺失的块,因此你可以现在移除选定的键,之后再移除其余的。请保留清单,直到所有插入内容都被移除。清单中包含原始和注入的 SHA-256 哈希,用于审计。现有的 24 字符键仍然可以移除。

压缩文件、source map 与哈希

压缩后的 JavaScript 可能包含普通注释,也可能包含诸如 //# sourceMappingURL=app.js.map 之类的元数据。该注解告诉调试工具在哪里找到 source map。它不会重新计算内容哈希,也不会让后续编辑对完整性检查变得安全。

任何添加的注释都会改变文件的字节。在最终编辑之后,请重新计算受影响的内容哈希、Subresource Integrity 值、资源签名以及缓存或 service-worker 清单。过时的 SRI 值可能导致浏览器无法加载脚本。SpikeStrip 会复制资源,但不会为你重命名带哈希的 bundle、重写其引用、重新生成 source map 或更新完整性元数据。

放置位置对 source map 也很重要。自动插入器会在代码中的语句边界处添加注释,这可能会移动映射的列位置。在所有可执行代码之后追加的单独注释通常能保留现有已映射代码的位置。请将其放在单独一行,以免前面的 // 注释将其吞掉,并保留现有的 sourceMappingURL 注解作为最后的元数据行。这种放置方式仍然会改变哈希。原始导出让你可以选择放置位置,但它不会自动追加任何内容。

压缩器和 CDN 可能会剥离注释。请将它们放在最后一个剥离注释的转换之后,或配置保留策略。在注释达到最终形式之后,再完成哈希计算、签名、完整性生成和部署元数据更新。

HTML 注释会改变 DOM 注释节点列表。诸如 Function.prototype.toString() 之类的反射式 JavaScript 可能会暴露插入的注释,因此语法树等价并不能保证检查自身源代码的代码行为完全相同。键是公开标识符。它们不包含任何机密,也不会发起远程跟踪请求;请搜索评估日志或报告以检测它们。

示例与检查

node bin/spikestrip.mjs inject examples/site --output ../spikestrip-demo --count 6 --manifest ../spikestrip-demo-private/run.json --write
pnpm test
pnpm check

测试会检查逐字节往返、选定键移除、无关编辑以及现有 24 字符键的移除。它们还会检查对已编辑/重复块的拒绝、路径遍历、嵌套输出与覆盖拒绝、UTF-8 BOM、CRLF、正则表达式、模板、指令、模块、CommonJS、shebang 以及 ASI。原始导出测试会检查计数、包装器、键唯一性、参数校验以及 ARTEX 配置文件选择。Provider 测试覆盖请求构造、无成本预览、重复拒绝以及不完整响应。这些测试使用 mock,不消耗 API 额度。legacy/sprinkle_canaries.py 保留了最初的仅 Python 实现。

Web 文件类型中的提示示例

以下每个文件都包含三条提示注释,各自带有独立的 12 字符键。这些示例混合了指令诱饵、虚假漏洞线索、CVE 引用以及数学任务。所声称的路由和易受攻击行为均为虚构。CLI 会自动将注释插入 HTML 和纯 JavaScript。CSS 和 SVG 示例展示了手动放置方式;CLI 不会注入这些格式。这些键仅作示例用途,自动移除需要由脚本创建的清单文件。

HTML — index.html

下载工具