
Обратимые приманки-подсказки на HTML и JavaScript с непрозрачными ключами для каждой вставки.
[!WARNING]
Этот проект находится в разработке.
SpikeStrip призван вдохновить тех, кто создаёт средства защиты от инструментов автоматизации на базе ИИ, таких как ARTEX и аналогичных систем. Его приманки и промпты генерации являются экспериментальными.
SpikeStrip добавляет обратимые промпт-приманки в исходный код HTML и файлы JavaScript. Комментарии содержат инструкции, перенаправляющие оценку ИИ, ложные зацепки об уязвимостях и математические отвлекающие задачи. Они могут отвлечь агентов, которые следуют комментариям в исходном коде, или превратить непроверенные подсказки в цели сканирования. Обычному сканеру потребовалось бы извлечь указанные в подсказках пути или параметры, чтобы эти комментарии повлияли на его работу. Инструмент не гарантирует остановку агентов, изолирующих недоверенный контент, или сканеров, игнорирующих комментарии.
Каждая вставка получает случайный 12-символьный шестнадцатеричный ключ, например a7c94e2b610f. Ключи проверяются на дубликаты в рамках каждого запуска. У развёрнутых комментариев нет брендинга SpikeStrip или фиксированного префикса-канарейки. HTML-комментарии видны в режиме просмотра исходного кода; JavaScript-комментарии видны при загрузке скрипта. Комментарии не добавляют обратных вызовов, исполняемых циклов или вычислений во время выполнения. Три встроенные приманки-справки/паузы используют нейтральные формулировки для проверки.
Приватный манифест фиксирует каждый комментарий и его ключ. Используйте его для удаления выбранных комментариев после изменения номеров строк. Исходный список из десяти записей остаётся в src/payloads.mjs как originalPayloads и содержит ровно 100 слов. Пул по умолчанию теперь содержит 28 записей, включая 18 дополнительных приманок-инструкций и ложных зацепок об уязвимостях. Исходные математические задачи включают открытые проблемы, противоречия и бесконечные задачи; не все из них доказанно неразрешимы.
Ложные зацепки называют вымышленные маршруты и параметры для SSRF, SQL-инъекций, серверного внедрения шаблонов, DOM-based 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 с зафиксированным в репозитории lockfile. Пакет является приватным и не предназначен для публикации в npm.
Запустите инструмент для собранного статического веб-корня, после минификации и перед развёртыванием. Исходный каталог и каталог вывода должны быть разными, и ни один не должен находиться внутри другого. Копия вывода включает обычные ресурсы и изменённые файлы. Инструмент оставляет оригиналы нетронутыми и исключает символические ссылки, метаданные систем контроля версий, каталоги зависимостей, приватные каталоги манифестов и файлы окружения.
# 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 МБ. Он также сообщает о поддерживаемых исходных файлах, не имеющих безопасных позиций для вставки. Эти исходные файлы копируются без изменений.
Используйте --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 для встроенных и от 1 до 1 000 с --dynamic.
Необработанные экспорты не создают манифест удаления, поскольку 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-запрос.