Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Pyison — Pythonic AI-краулер-тарпит | Kitploit
Инструменты/GitHubGitHub/jonaslong/pyison
Оборонительные ИнструментыСкриптинг и автоматизацияВеб-безопасностьОбучение и ОбразованиеКраулерАнти-Бот
GitHubjonaslong/pyison

Pyison

Pythonic AI-краулер-тарпит

Репозиторий
1222411 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Pyison

Pyison — это «смоляная яма» для AI-веб-краулеров.

Введение

  • Как и все веб-краулеры, AI-боты запрашивают страницы с веб-серверов, а затем переходят по ссылкам на странице к другим страницам. Таким образом они могут построить индекс всего веб-сайта.
    • Однако в отличие от других веб-краулеров, AI-боты представляют некоторые уникальные проблемы:
      • Администраторы сервера могут настроить файл robots.txt, который указывает веб-краулерам, какие страницы они могут и не могут сканировать.
        • Было обнаружено, что некоторые AI-краулеры игнорируют этот файл. Существуют проблемы конфиденциальности и авторских прав, связанные с разрешением этим ботам использовать данные веб-сайта для обучения LLM, особенно когда пользователь явно отказался от сканирования.
        • Некоторые краулеры также игнорируют ограничение скорости. Когда они запрашивают страницы как можно быстрее, это может создать значительную нагрузку на веб-сервер.
    • Представляем Pyison. Как и другие «смоляные ямы» для AI-краулеров (Nepenthes, Iocane), Pyison подаёт веб-краулерам бесконечный список ссылок на другие страницы своего сайта. Это заманивает краулеров в ловушку на одном сайте, где они бесконечно блуждают по постоянно растущему морю ссылок.
      • Удержание AI-краулеров на одном месте предотвращает индексацию других частей сайта, которые владелец, возможно, не хочет передавать LLM.
      • В то же время эти страницы могут содержать тонны бесполезного текста. Когда LLM включают этот текст в свои модели, они могут постепенно «отравляться», поскольку случайный ввод делает их ответы менее связными.

Мотивация

  • Создание полезного программного обеспечения для противодействия росту кражи контента LLM
  • Решение проблем существующих «смоляных ям» для AI:
    • Генерация случайного текста без использования цепей Маркова, LLM или каких-либо существующих образцов письма
    • Отсутствие дискриминации AI-ботов по заголовку User-Agent, поскольку краулеры часто маскируются под обычных пользователей
    • Разработка реалистичного сайта в стиле блога для предотвращения обнаружения
      • Создание чрезвычайно настраиваемого фреймворка для дальнейшей конфигурации
    • Предоставление решения, которое легко интегрируется в существующий веб-сайт
      • Поддерживает, но не требует, обратные прокси/конкретные веб-серверы; предоставляет настройку подпути с корневым каталогом документов
    • Работа с малым потреблением ресурсов, а не с целой CMS или многофункциональным веб-сервером

Технические характеристики

  • Этот проект запускает динамический веб-сервер с использованием библиотеки Python HTTPServer
  • Предложения генерируются из смеси 50/50 случайных английских слов и «стоп-слов»
  • Pyison использует глобальную «соль», а также URL страницы для инициализации ГСЧ. Это гарантирует, что если краулеры когда-либо выполнят «проверку на вменяемость», перезагрузив страницу, она будет такой же, как в прошлый раз. В то же время разные серверы должны использовать разные глобальные зерна, чтобы сайты, использующие Pyison, не выглядели одинаково.
  • Можно сгенерировать неограниченное количество страниц, поскольку Pyison на самом деле не создаёт никаких постоянных файлов. Это динамический веб-сервер, поэтому он просто генерирует HTML и отправляет его клиенту.
  • Использование HTML-тегов контента, CSS-форматирования и изображений должно сделать сайт более реалистичным для краулера.
  • Можно настроить вывод Pyison без переписывания программы, изменив файлы конфигурации, статики и шаблонов.
  • Pyison отвечает на ошибочные POST и PUT-запросы 404 на случай, если краулеры проверят, настроены ли эти HTTP-методы.

Начало работы

  • Клонируйте этот проект в локальную папку

  • Измените настройки в файле config/config.json

    • Установите random-seed на случайное число!
    • Установите номер port для сервера
    • Для получения дополнительной информации смотрите раздел Конфигурация
  • (Опционально, но рекомендуется) Обновите HTML-шаблон, CSS, изображения и robots.txt по своему вкусу

    • Этот проект более эффективен, если страницы выглядят по-разному, что можно сделать, варьируя структуру HTML и CSS. Переставьте и переименуйте некоторые элементы или перепишите всё полностью.
  • (Опционально) Отредактируйте robots.txt, если хотите изменить, какие боты будут затронуты

  • Настройте среду сервера любым из методов ниже

  • Поместите сервер за обратным прокси

    Локальный запуск

    • Установите nltk
      • pip install nltk
    • Запустите Pyison
      • python3 src/server.py
    • Проверьте, что он работает
      • Откройте http://localhost:<ваш номер порта> в браузере

    Docker

Обратный прокси

Настоятельно рекомендуется использовать обратный прокси для отдачи этого контента. Это может снизить нагрузку на сервер за счёт кэширования страниц и введения ограничения скорости, а также отдавать контент через https и защищать от некоторых базовых эксплойтов веб-сервера.

Соображения

  • В этих примерах используется Nginx Proxy Manager, но должно работать любое программное обеспечение обратного прокси
  • Pyison поддерживает самые строгие настройки SSL NPM
  • NPM должен передавать HTTP-заголовок User-Agent от NPM к серверу Pyison без специальной настройки. При необходимости используйте proxy_pass_header User-Agent;.

Независимая конфигурация поддомена

  • Выберите следующие настройки в пользовательском интерфейсе или введите эквивалентные настройки в файле конфигурации:

    Интерфейс NGINX Reverse Proxy. Открыто диалоговое окно "Edit Proxy Host".
    • Domain Names: Домен или поддомен, которым вы управляете, например tarpit.example.com
    • Scheme: http
    • Forward Hostname / IP: localhost или имя контейнера Docker, если используется сеть Docker
    • Forward Port: Порт, определённый в docker-compose/run command/config.json (по умолчанию 80)
    • Включите Cache Assets и Block Common Exploits, но не Websockets Support

Конфигурация подпути

  • Чтобы использовать Pyison в подпути, используйте следующую конфигурацию location

    root@kitploit:~
    # Обрабатывает корневую страницу ("example.com/tarpit")
    location /tarpit {
        proxy_pass http://localhost:80;
    }
    
    # Обрабатывает все подстраницы ("example.com/tarpit/a" и "example.com/tarpit/a/b")
    location /tarpit/ {
        proxy_pass http://localhost:80;
    }
    
    # Обрабатывает все URL с 3-буквенным расширением файла ("example.com/tarpit/style.css" и "example.com/tarpit/images/picture.jpg")
    # Обратите внимание, что ~ обозначает совпадение по регулярному выражению. Строка, следующая за ним, должна быть допустимым регулярным выражением.
    location ~ .*\/tarpit\/.*\....$ {  
        proxy_pass http://localhost:80;
    }
    
  • Вот работающая настройка с использованием пользовательского интерфейса:

    Интерфейс NGINX Reverse Proxy. Диалоговое окно "Edit Proxy Host" открыто на вкладке "Custom locations".
    • Первый блок location, /tarpit, не имеет специальной конфигурации. Он будет вести себя как первый блок location, определённый выше.
    • Второй блок location, /tarpit/, содержит второй и третий блоки location, определённые выше
    • Замените tarpit на желаемый корневой путь.
      • Если используется более глубокий корневой путь, например /tar/pit, обратите внимание, что третий блок location использует регулярное выражение, поэтому любые слэши должны быть экранированы обратной косой чертой

Конфигурация

  • Файл config.json определяет различные настройки для лёгкой настройки:
  • port (по умолчанию 80)
    • Порт, на котором будет отдаваться контент
  • random-seed (Пожалуйста, измените это!)
    • Глобальное зерно (соль), используемое для того, чтобы не все веб-серверы имели точно такой же текст
    • Установите это на какое-нибудь случайное число, не обязательно безопасное
  • document-root (по умолчанию "/")
    • Добавляет префикс к ссылкам
    • Вам нужно будет изменить это только в том случае, если вы используете обратный прокси и отдаёте контент в подкаталог
      • Если да, используйте либо полный путь, либо путь относительно корня
        • например, https://example.com/pyison/ или /pyison/
  • fake-image-dir (по умолчанию ["images"])
    • Все изображения будут выглядеть так, как будто они отдаются из этого пути
    • Принимает либо одну строку, null, либо список параметров для случайного выбора
  • fake-css-dir (по умолчанию ["css"])
    • Все CSS-файлы будут выглядеть так, как будто они отдаются из этого пути
    • Принимает либо одну строку, null, либо список параметров для случайного выбора
  • spacing-characters (по умолчанию ["_","-","%20"])

HTML-шаблоны

  • Перед отправкой вашего HTML-файла(ов) Pyison заменит некоторые предустановленные теги своими собственными значениями

    Статические значения

    Если один из этих тегов указан несколько раз в шаблоне, каждое значение будет одинаковым
    • {HOME}
      • Ссылка на корень документов, как определено в конфигурации
    • {TITLE}
      • Текст заголовка страницы, основанный на текущем URL
        • например, /blog/about/once-upon-a-time -> Once Upon A Time
    • {UPTITLE}
      • Текст заголовка родительской страницы, сгенерированный из текущего URL
    • {MAIN}
      • Должен использоваться как основной контент сайта. Он сгенерирует несколько абзацев, содержащих случайный текст, вместе с заголовками разделов и подзаголовками. Случайные ссылки также могут присутствовать в каждом абзаце.
    • {UP}
      • Путь к родительской странице
      • например: /blog/about/once-upon-a-time -> /blog/about
    Каждое вхождение этих тегов будет заменено уникальным значением

Изображения

Логотип Pyison. Прямоугольное изображение с ландшафтной ориентацией, с зернистым серым фоном. Ярко-зелёный текст шрифтом, имитирующим мазок кисти, с тёмно-красной тенью, расположен по центру в верхней трети изображения. Надпись гласит: 'Pyison'. Ближе к нижней части стилизованный угловатый белый текст гласит: 'This is a tar pit for AI webcrawlers'. При ближайшем рассмотрении видны артефакты JPEG по всему изображению.

Вот пример того, как сайт выглядит до любого редактирования шаблона:

Уменьшенное изображение целой страницы Pyison. Используется чёрный текст на светло-жёлтом фоне. В верхней части страницы зелёная навигационная панель с ссылками, содержащими случайные слова. Под панелью навигации находится заголовок 'Home' и изображение логотипа с надписью 'Pyison: This is a tar pit for AI webcrawlers'. Под изображениями расположено несколько абзацев случайных слов с заголовками разных уровней отступа. Эти абзацы занимают большую часть страницы. Некоторые части текста внутри абзацев являются ссылками на другие страницы. В нижней части страницы есть фиктивная авторская заметка с другим логотипом Pyison. Заметка гласит: 'Written by It'S An'. Ниже этого находится раздел 'Other Posts' с несколькими дополнительными ссылками.
Скачать инструмент

С помощью docker compose

  • Создайте минимальный файл docker-compose.yml, содержащий
    root@kitploit:~
    services:
      pyison:
        image: "ghcr.io/jonaslong/pyison:main"
        container_name: pyison
        tty: true
        ports:
          - 80:80
    
  • docker compose up
    • (Опционально) Используйте флаг -d для отсоединения от контейнера
  • Чтобы изменения локальных файлов вступили в силу, клонируйте этот репозиторий и используйте bind mount. Смотрите полный файл compose.

С помощью docker run

  • docker run --tty --name pyison -p "127.0.0.1:80:80" --rm ghcr.io/jonaslong/pyison:main
    • (Опционально) Удалите флаг --rm, чтобы сохранить контейнер

Сборка из исходного кода

  • Клонируйте репозиторий локально
  • docker build -t pyison:latest .
  • Запустите контейнер с помощью docker run --tty --name pyison -p "127.0.0.1:80:80" --rm pyison:latest
  • Например, для /tar/pit потребуется location ~ .*\/tar\/pit\/.*\....$ в третьем блоке location
  • Обновите настройку document-root в Pyison, указав подпуть, используемый прокси (см. раздел Конфигурация)
  • Смотрите разделы выше для дальнейшей настройки хоста, портов, SSL и т.д.
    • Пробелы, используемые между словами в URL страницы
    • Это также повлияет на то, как URL страниц разделяются для декодирования обратно в заголовки
  • unsafe-characters (по умолчанию ["'","`"])
    • Символы, которые могут встречаться в списке слов, но должны быть удалены из URL
    • По умолчанию это удаляет апострофы (`) и одинарные кавычки (')
  • robots-txt (по умолчанию "assets/robots.txt")
    • Настраивает файл, который отдаётся по адресу /robots.txt
    • Если строка пуста, возвращается ответ 404
  • html-templates (по умолчанию ["assets/template.html"])
    • HTML-файл для отдачи, содержащий текст форматирования для предоставления случайных значений (см. HTML-шаблоны)
    • Принимает либо одну строку, либо список параметров для случайного выбора
  • css-files (по умолчанию ["assets/style.css"])
    • CSS-файл(ы) для отдачи
    • Над CSS-файлами не производится никакой замены
    • Принимает либо одну строку, либо список параметров для случайного выбора
  • images
    • ico (по умолчанию ["assets/logo.ico"])
    • jpg (по умолчанию ["assets/logo.jpg"])
    • png (по умолчанию["assets/logo.png"])
    • Для каждого из перечисленных расширений изображений: один файл изображения, null или список изображений для случайного выбора
  • remove-from-stop-words
    • Библиотека nltk имеет список «стоп-слов», который полезен для генерации множества распространённых слов. Однако некоторые записи не следует использовать для генерации текста, поскольку они являются явным признаком того, что это сгенерированный контент
  • {CSSLINK}
    • Случайный URL к CSS-документу
    • Начальный путь этого URL (например, /styles) можно задать в конфигурации
    • Убедитесь, что указали '.css' сразу после тега. Это то, как веб-сервер узнает, что нужно отправлять CSS, а не дополнительный HTML.
      • Фактический документ, возвращаемый сервером, будет выбран на основе CSS-страницы(ниц), указанных в конфигурации
  • Динамические значения

    • {WORD}
      • Генерирует одно случайное слово. Имена собственные могут быть написаны с заглавной буквы.
    • {NAME}
      • Генерирует два слова с заглавной буквы, разделённые пробелом.
    • {SENTENCE}
      • Генерирует случайное предложение, начинающееся с заглавной буквы и заканчивающееся точкой.
    • {PIC}
      • Генерирует случайный URL к файлу изображения
      • Начальный путь этого URL (например, /images) можно задать в конфигурации
      • Убедитесь, что после ссылки указано соответствующее расширение файла (.png, .jpg, .ico)
        • Фактическое изображение, возвращаемое сервером, будет выбрано на основе предоставленного расширения и изображения(ий), указанных в конфигурации
    • {LINK}
      • Генерирует случайную ссылку, которая может содержать подпути
      • Имя страницы может быть разделено дефисами или подчёркиваниями
      • например: /dressage/electrochronometer/himself-she-eciliate
    • {OVER}
      • Генерирует случайную ссылку на родительскую страницу того же уровня
      • например: при посещении /neighborliness/wont_unhonest тег {OVER} может быть заменён на /neighborliness/hooliganism
    • {NEWTITLE}
      • Генерирует случайный заголовок
      • Использует серию случайных слов в заглавной записи (Title Case)
      • например: Nectarial Electrofusion Which Dephosphorization
      • Если этот тег следует за тегом {LINK} или {OVER}, заголовок и URL будут синхронизированы
        • например: <a href="https://github.com/jonaslong/pyison/blob/main/%7BOVER%7D">{NEWTITLE}</a> может быть заменено на <a href="https://github.com/jonaslong/pyison/blob/main/swordmanship/yeller/over-will-oghuz">Over Will Oghuz</a>
        • Теги обрабатываются последовательно по шаблону. Тег {NEWTITLE} будет искать в обратном направлении ближайший тег {LINK} или {OVER} для синхронизации.
          • Теги всегда будут правильно сопоставляться, когда за любым тегом {LINK} или {OVER} сразу следует его тег , если требуется .
    {NEWTITLE}
    {NEWTITLE}