Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Pyison — PythonicなAIクローラtarpit | Kitploit
ツール/GitHubGitHub/jonaslong/pyison
防御ツールスクリプトと自動化ウェブセキュリティ学習と教育クローラーアンチボット
GitHubjonaslong/pyison

Pyison

PythonicなAIクローラtarpit

リポジトリを見る
1222411ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Pyison

PyisonはAIウェブクローラー用のタールピットです。

はじめに

  • すべてのウェブクローラーと同様に、AIボットはウェブサーバーからページを要求し、そのページのリンクをたどって他のページへ移動します。これにより、ウェブサイト全体のインデックスを構築できます。
    • ただし、他のウェブクローラーとは異なり、AIボットはいくつかの特有の問題を引き起こします。
      • サーバー管理者はrobots.txtファイルを設定できます。これはウェブクローラーにクロールすべきページとすべきでないページを指示します。
        • 一部のAIクローラーはこのファイルを無視することが確認されています。ユーザーが明示的にクロールを拒否している場合でも、これらのボットがウェブサイトのデータをLLMのトレーニングに使用することを許可すると、プライバシーと著作権の問題が生じます。
        • また、一部のクローラーはレート制限を無視します。可能な限り高速にページを要求すると、ウェブサーバーに大きな負荷がかかります。
    • ここでPyisonの登場です。他のAIクローラータールピット(Nepenthes、Iocane)と同様に、Pyisonはウェブクローラーに自分のサイト内の他のページへの無限のリンクリストを提供します。これによりクローラーを単一のサイトに閉じ込め、増え続けるリンクの海を際限なく巡回させます。
      • AIクローラーを一箇所に留めておくことで、サイト所有者がLLMに提供したくないサイトの他の部分をインデックスするのを防ぎます。
      • 同時に、これらのページには大量の無意味なテキストを含めることができます。LLMがこのテキストをモデルに取り込むと、ランダムな入力によって応答の一貫性が低下し、徐々に「毒される」可能性があります。

動機

  • LLMによるコンテンツ盗用の増加に対処するための有用なソフトウェアの作成
  • 既存のAIタールピットの問題解決:
    • マルコフ連鎖、LLM、既存の文章サンプルを使用せずにランダムテキストを生成
    • クローラーはしばしば通常のユーザーになりすますため、User-AgentヘッダーでAIボットを区別しない
    • 検出を防ぐために現実的なブログ風サイトの設計
      • さらなる設定を可能にする高度にカスタマイズ可能なフレームワークの作成
    • 既存のウェブサイトに簡単に統合できるソリューションの提供
      • リバースプロキシや特定のウェブサーバーを必須とせずサポートし、ドキュメントルート設定によるサブパス構成を提供
    • 完全なCMSや多機能ウェブサーバーではなく、小さなフットプリントで動作

技術仕様

  • このプロジェクトはPythonのHTTPServerライブラリを使用して動的ウェブサーバーを実行します
  • 文章はランダムな英単語と「ストップワード」の50/50の混合から生成されます
  • PyisonはグローバルソルトとページURLを使用してRNGをシードします。これにより、クローラーがページをリロードして「健全性チェック」を行った場合でも、前回確認したときと同じページになることが保証されます。同時に、異なるサーバーは異なるグローバルシードを使用する必要があり、すべてのPyisonサイトが同じように見えるのを防ぎます。
  • Pyisonは実際には永続的なファイルを作成しないため、無制限のページを生成することが可能です。動的ウェブサーバーであり、HTMLを生成してクライアントに送信するだけです。
  • HTMLコンテンツタグ、CSSフォーマット、画像の使用により、サイトがクローラーにとってより現実的に見えるはずです。
  • config、static、テンプレートファイルを変更することで、プログラムを書き換えずにPyisonの出力を設定することが可能です。
  • Pyisonは、クローラーがそれらのHTTPメソッドが設定されているかテストする場合に備えて、誤ったPOSTおよびPUTリクエストに対して404を返します。

はじめに

  • このプロジェクトをローカルフォルダにクローンします

  • 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

    docker composeを使用

    • 最小限の docker-compose.yml ファイルを作成します。内容は以下の通りです。

リバースプロキシ

このコンテンツを配信するには、リバースプロキシを使用することを強くお勧めします。ページのキャッシュとレート制限の導入によりサーバー負荷を軽減し、HTTPS経由でのコンテンツ配信や、いくつかの基本的なウェブサーバー攻撃からの保護が可能です。

考慮事項

  • これらの例はNginx Proxy Managerを使用していますが、他のリバースプロキシソフトウェアでも動作するはずです。
  • PyisonはNPMの最も厳格なSSL設定をサポートしています。
  • NPMは特別な設定なしでUser-Agent HTTPヘッダーをNPMからPyisonサーバーに渡すはずです。必要に応じてproxy_pass_header User-Agent;を使用してください。

独立したサブドメイン設定

  • UIで以下の設定を選択するか、設定ファイルに同等の設定を入力します:

    NGINXリバースプロキシインターフェース。「プロキシホストの編集」ダイアログが開いています。
    • ドメイン名: tarpit.example.com など、管理下にあるドメインまたはサブドメイン
    • スキーム: http
    • 転送ホスト名/IP: localhost、またはDockerネットワークを使用している場合はDockerコンテナ名
    • 転送ポート: docker-compose/runコマンド/config.jsonで定義されたポート(デフォルトは80)
    • Cache AssetsとBlock Common Exploitsを有効にし、Websockets Supportは有効にしない

サブパス設定

  • サブパスでPyisonを使用するには、以下のロケーション設定を使用します

    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;
    }
    
    # 3文字のファイル拡張子を持つすべてのURLを処理 ("example.com/tarpit/style.css" および "example.com/tarpit/images/picture.jpg")
    # ~ は正規表現マッチングを示すことに注意。その直後の文字列は有効な正規表現である必要があります。
    location ~ .*\/tarpit\/.*\....$ {  
        proxy_pass http://localhost:80;
    }
    
  • UIを使用した動作する設定例:

    NGINXリバースプロキシインターフェース。「プロキシホストの編集」ダイアログが「カスタムロケーション」タブで開いています。
    • 最初のロケーションブロック/tarpitにはカスタム設定はありません。上記で定義された最初のロケーションブロックと同じように動作します。
    • 2番目のロケーションブロック/tarpit/には、上記で定義された2番目と3番目のロケーションブロックが含まれます
    • tarpitを目的のルートパスに置き換えてください。
      • /tar/pitのようなより深いルートパスを使用する場合、3番目のロケーションブロックは正規表現を使用するため、スラッシュはバックスラッシュでエスケープする必要があることに注意してください
        • 例:/tar/pitの場合、3番目のロケーションブロックでlocation ~ .*\/tar\/pit\/.*\....$が必要

設定

  • 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"])
    • ページURLの単語間に使用する区切り文字
    • これは、ページURLが分割されてタイトルに戻される方法にも影響します
  • unsafe-characters (デフォルト ["'","`"])
    • 単語リストに自然に出現するがURLから削除すべき文字

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
    • {CSSLINK}
      • CSSドキュメントへのランダムURL
      • このURLの先頭パス(例: /styles)は設定で設定できます
    これらのタグの出現ごとに一意の値に置き換えられます。

画像

Pyisonのロゴ。長方形の横向き画像で、ざらざらした灰色の背景。上部3分の1の中央に、濃い赤のテキストシャドウが付いた塗りブラシフォントの明るい緑色のテキストがあり、「Pyison」と読める。下部近くには、スタイリッシュな角張った白いテキストで「これはAIウェブクローラー用のタールピットです」と書かれている。よく見ると、画像全体にJPEGの圧縮ノイズが見られる。

テンプレートを編集する前のサイトの外観のサンプルです:

Pyisonページ全体の縮小画像。薄い黄色の背景に黒いテキスト。ページ上部にランダムな単語を含むリンクがある緑色のナビゲーションバー。ナビゲーションバーの下に「Home」というタイトルと「Pyison: This is a tar pit for AI webcrawlers」と書かれたロゴ画像。画像の下には、さまざまなレベルのインデントで見出しが付いたランダムな単語の段落がいくつかあり、ページの大部分を占めている。段落内の一部のテキストは他のページへのリンク。ページの下部近くに、別のPyisonロゴを伴う偽の著者紹介があり、「Written by It'S An」と書かれている。その下に「Other Posts」セクションがあり、さらにいくつかのリンクがある。
ツールをダウンロード
root@kitploit:~
services:
  pyison:
    image: "ghcr.io/jonaslong/pyison:main"
    container_name: pyison
    tty: true
    ports:
      - 80:80
  • docker compose up
    • (オプション) -d フラグを使用してコンテナからデタッチします
  • ローカルファイルの変更を反映させるには、このリポジトリをクローンし、バインドマウントを使用してください。完全な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 でコンテナを実行
  • プロキシで使用されるサブパスでPyisonのdocument-root設定を更新します(設定セクションを参照)
  • ホスト、ポート、SSLなどのさらなる設定については上記のセクションを参照してください
  • デフォルトでは、アポストロフィ(`)とシングルクォート(')を削除します
  • 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ライブラリには、多くの一般的な単語を生成するのに便利な「ストップワード」リストがあります。ただし、一部のエントリは、生成されたコンテンツであることが明らかにわかるため、テキスト生成に使用すべきではありません。
  • タグの直後に'.css'を指定してください。これによりウェブサーバーはさらにHTMLではなくCSSを送信することを認識します。
    • サーバーが返す実際のドキュメントは、設定で指定されたCSSページに基づいて選択されます。
  • 動的な値

    • {WORD}
      • 単一のランダム単語を生成します。固有名詞は大文字になる場合があります。
    • {NAME}
      • スペースで区切られた2つの大文字の単語を生成します。
    • {SENTENCE}
      • 大文字で始まりピリオドで終わるランダムな文を生成します。
    • {PIC}
      • 画像ファイルへのランダムURLを生成します
      • このURLの先頭パス(例: /images)は設定で設定できます
      • リンクの後に適切なファイル拡張子(.png、.jpg、.ico)を付けてください
        • サーバーが返す実際の画像は、指定された拡張子と設定で指定された画像に基づいて選択されます。
    • {LINK}
      • サブパスを含む可能性のあるランダムリンクを生成します
      • ページ名はダッシュまたはアンダースコアで区切られる場合があります
      • 例: /dressage/electrochronometer/himself-she-eciliate
    • {OVER}
      • 兄弟ページへのランダムリンクを生成します
      • 例: /neighborliness/wont_unhonest にアクセスした場合、{OVER}タグは /neighborliness/hooliganism に置き換えられる可能性があります
    • {NEWTITLE}
      • ランダムなタイトルを生成します
      • タイトルケースのランダム単語のシリーズを使用します
      • 例: 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}タグを後方に検索します。
          • {NEWTITLE}が望まれる場合、{LINK}または{OVER}タグの直後にタグが続くとき、タグは常に正しくペアになります。
    {NEWTITLE}