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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
vi-bot — 28個の重み付きモジュール、行動分析、ブラウザフィンガープリンティング、ハニーポット、サーバーサイド検証を備えたクライアントサイドボット検出ライブラリ。ヘッドレスブラウザ、Selenium、Puppeteer、Playwright、ステルス自動化フレームワークを検出します。 | Kitploit
ツール/GitHubGitHub/mohamedlahmeri01/vi-bot
防御ツールIDS/IPS回避ウェブセキュリティアンチボットフィンガープリントスプーフィング異常検知
GitHubmohamedlahmeri01/vi-bot

vi-bot

28個の重み付きモジュール、行動分析、ブラウザフィンガープリンティング、ハニーポット、サーバーサイド検証を備えたクライアントサイドボット検出ライブラリ。ヘッドレスブラウザ、Selenium、Puppeteer、Playwright、ステルス自動化フレームワークを検出します。

リポジトリを見る
211ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

BotDetect v2 — 本番環境向けボット検出ライブラリ

BotDetect Logo

重み付けスコアリング、行動分析、ブラウザフィンガープリンティング、設定可能なしきい値を備えたクライアントサイドのボットおよび自動化検出ライブラリ。ヘッドレスブラウザ、Selenium、Puppeteer、Playwright、CDPベースのツール、ステルス自動化フレームワークを検出します。

v2.1.0 — アンチ検出ハニーポット、GPU安定なキャンバスフィンガープリンティング、強化された行動分析、遅延初期化、サーバーサイド改ざん検出、リクエストフィンガープリントバインディング、レート制限。


目次

  • 機能
  • アーキテクチャ
  • クイックスタート
  • クライアントサイドAPI
  • サーバーサイド統合
  • 検出モジュール
  • 設定
  • 本番環境チェックリスト
  • テスト

機能

  • 28の検出モジュール — 自動化フレームワーク、ヘッドレスブラウザ、フィンガープリンティング、行動分析、ハニーポット、スタックトレーストラップを網羅
  • 重み付けスコアリングシステム — 各シグナルは設定可能な重みを持ち、最終スコアはサーバーサイドで計算
  • 3つの判定レベル: human、suspicious、bot に対応するフリクションアクション(monitor、challenge、block)
  • サーバーサイド検証 — nonceゲート、リプレイ防止、PoW署名
  • スタックトレーストラップ — DOM APIをモンキーパッチして自動化ツールのコールスタックを取得
  • 行動分析 — マウスの曲線、キーストロークタイミングの分散、スクロール加速度、タッチダイナミクス
  • アンチ検出ハニーポット — ランダム化されたCSSクローキング、デコイフィールド、現実的なフィールド名
  • サーバーサイド改ざん検出 — シグナルの整合性を検証、ゲーミング試行を検出
  • リクエストフィンガープリントバインディング — PoWトークンをHTTPリクエスト属性にバインド
  • レート制限 — すべての検証エンドポイントに対するセッション単位のレート制限
  • No-script検出 — 検出ペイロードを送信しないクライアントを識別
  • 既知のクローラーの許可リスト — スコアリングから除外される20以上の正当なボット

アーキテクチャ

root@kitploit:~
Browser                                  Your Server
┌──────────────────────────┐            ┌──────────────────────┐
│ Collector (singleton)    │  POST      │ Express Middleware    │
│  ├─ 28 detection modules│  signals   │  ├─ NonceManager      │
│  ├─ BehaviorTracker     │  + nonce   │  ├─ RateLimiter       │
│  ├─ HoneypotTraps       │───────────▶│  ├─ TamperDetector    │
│  ├─ Stack trace traps   │            │  ├─ computeVerdict()  │
│  └─ IframeContext       │            │  └─ Proof-of-Work     │
│                         │  verdict   │                        │
│  ↓ collect() →          │  + proof   │  Returns:             │
│  DetectionResult[]      │◀───────────│  { verdict, score,    │
└──────────────────────────┘            │    confidence, proof, │
                                        │    tamperScore }      │
                                        └──────────────────────┘
                                              │
                                              ▼
                                        Session-gated endpoint
                                        (login, checkout, etc.)
                                        validates proof before
                                        granting access

主要な原則: ブラウザは生の DetectionResult[] シグナルのみを収集します。サーバーが秘密の重みテーブルを使用して最終判定を計算します。クライアントで計算された判定は決して信頼されません。


クイックスタート

1. ビルド

root@kitploit:~
npm install
npm run build

dist/ に出力:

  • botdetect.min.js (ポリフィル付き, ~151 KB)
  • botdetect-clean.min.js (最新ブラウザのみ, ~74 KB)

2. ページに組み込む

root@kitploit:~
<script src="/path/to/botdetect.min.js"></script>
<script>
  BotDetect.collector.enableTraps();
  BotDetect.collector.enableBehavioralTracking();
  BotDetect.collector.enableHoneypots();
</script>

3. サーバーサイド検証を設定

root@kitploit:~
cd server
npm install express cors express-session
node example-integration.js

4. 機密アクションでシグナルを送信

root@kitploit:~
async function onLogin() {
  const { nonce } = await (await fetch('/api/botdetect/nonce')).json();
  BotDetect.collector.setNonce(nonce);

  const signals = await BotDetect.collector.collect();

  const resp = await fetch('/api/botdetect/verify', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ signals, nonce })
  });
  const { verdict, score, proof, friction } = await resp.json();

  document.getElementById('botdetect-proof').value = proof;
  document.getElementById('login-form').submit();
}

5. サーバーで検証

root@kitploit:~
app.post('/api/login', (req, res) => {
  const bd = req.session.botdetect;
  if (!bd) return res.status(403).json({ error: 'no_verification' });
  if (bd.verdict === 'bot') return res.status(403).json({ error: 'access_denied' });
  if (bd.verdict === 'suspicious') return challengeCaptcha(req, res);
  res.json({ success: true });
});

クライアントサイドAPI

コレクター(シングルトン)

root@kitploit:~
import Collector from './collector/Collector';
// またはグローバル: BotDetect.collector

検出器(デバッグのみ)

root@kitploit:~
import Detector from './detector/Detector';

警告: analyze() はブラウザ内で完全に実行されます。本番環境の判断にその出力を使用しないでください。

型定義

root@kitploit:~
interface DetectionResult {
  name: string;      // Module name
  score: number;     // 0.0 – 1.0
  weight: number;    // 1 – 10 (importance)
  detail?: string;   // Human-readable description
}

interface DetectionVerdict {
  verdict: 'bot' | 'suspicious' | 'human';
  score: number;       // 0.0 – 1.0
  confidence: number;  // 0.0 – 1.0
  signals: DetectionResult[];
  threshold: number;
  friction: 'monitor' | 'challenge' | 'block';
}

interface CollectorConfig {
  detectionTimeoutMs: number;   // per-module timeout (default: 3000)
  enableTraps: boolean;
  enableBehavioralTracking: boolean;
  enableHoneypots: boolean;
  thresholds: { strict: number; balanced: number; relaxed: number };
}

サーバーサイド統合

Express ミドルウェア

root@kitploit:~
const { createBotDetectEndpoint } = require('./server');

const { router, generateProofOfWork, cleanup } = createBotDetectEndpoint({
  secretSalt: process.env.BOTDETECT_SALT,
  scoring: {
    threshold: 'balanced',       // 'strict' | 'balanced' | 'relaxed' | number
    minSignals: 2,
    signalBoostThreshold: 0.8,
    frictionThresholds: { monitor: 0.2, challenge: 0.5, block: 0.8 }
  },
  nonce: { ttl: 300000 },              // 5-minute nonce expiry
  noScript: { timeout: 10000 },         // 10s no-script window
  rateLimit: { maxRequests: 10, windowMs: 60000 },
  noScriptPaths: ['/api/login', '/api/checkout', '/api/register']
});

app.use('/api', router);

エンドポイント

エンドポイントメソッド目的
/api/botdetect/nonceGET使い捨てnonceを発行

サーバーレスポンス形式

root@kitploit:~
{
  "verdict": "human",
  "score": 0.125,
  "confidence": 0.85,
  "tamperScore": 0,
  "friction": "monitor",
  "threshold": 0.5,
  "proof": "a1b2c3d4e5f6..."
}

サーバーサイドスコアリング(Node.js)

root@kitploit:~
const { computeVerdict, RateLimiter, NonceManager } = require('./scoring');

const verdict = computeVerdict(signals, {
  threshold: 'balanced',
  minSignals: 2,
  signalBoostThreshold: 0.8,
  frictionThresholds: { monitor: 0.2, challenge: 0.5, block: 0.8 }
});

// verdict.tamperScore > 0 if signal tampering detected

検出モジュール

自動化フレームワーク(重み 5–7)

Playwright固有(重み 3–4)

モジュール検出対象重み
playwrightWebKitWebKit自動化成果物4
playwrightOrientation方位 + chrome.runtime の不整合3

行動分析(重み 7)

モジュール分析対象シグナル重み
behavioralAnalysisマウスの曲線 + 直線比率、キーストロークCV + バーストパターン + KPM、スクロール加速度 + 方向変化、タッチ力の分散 + 半径7

ブラウザフィンガープリンティング(重み 3–4)

Navigator & OS プロパティ(重み 5)

モジュールチェック内容重み
navigatorInconsistencies11項目: languages、plugins、mimeTypes、platform、UA、cookies、DNT、touch、hardwareConcurrency、deviceMemory、connection5

Screen & Performance(重み 3)

モジュール検出対象重み

アクティブトラップ & ハニーポット(重み 8–9)

モジュール検出対象重み
honeypotTrapsランダム化された隠しフィールド + デコイ + カナリアエンドポイント9
stackTraceTraps

ネットワーク & コンテキスト(重み 1–2)

許可リスト(重み 0)

モジュール検出対象重み
verifiedBots20以上の既知クローラー(Googlebot、Bingbot、Yandex、Facebook、Twitter等)— -1を返し、スコアリングから除外0

設定

コレクター

root@kitploit:~
const collector = Collector.getInstance({
  detectionTimeoutMs: 1000,    // UX向上のため低く設定
  enableTraps: true,
  enableBehavioralTracking: true,
  enableHoneypots: true,
  thresholds: {
    strict: 0.3,     // 積極的(ログイン、チェックアウト)
    balanced: 0.5,   // デフォルト
    relaxed: 0.7     // 寛容(コンテンツブラウジング)
  }
});

検出器(デバッグのみ)

root@kitploit:~
const detector = Detector.getInstance({
  threshold: 'balanced',      // 'strict' | 'balanced' | 'relaxed' | number
  minSignals: 2,              // ブースト前の最小シグナル数
  signalBoostThreshold: 0.8,  // この閾値以上のシグナルに追加重み
  failPolicy: 'open',         // 'open' = エラー時 human, 'closed' = エラー時 bot
  frictionThresholds: {
    monitor: 0.2,
    challenge: 0.5,
    block: 0.8
  }
});

サーバー

root@kitploit:~
createBotDetectEndpoint({
  secretSalt: process.env.BOTDETECT_SALT,  // 秘密に保持
  scoring: { threshold: 'balanced' },
  nonce: { ttl: 300000, cleanupInterval: 60000 },
  noScript: { timeout: 10000 },
  rateLimit: { maxRequests: 10, windowMs: 60000 },
  requestFingerprint: true,                // PoWをリクエスト属性にバインド
  noScriptPaths: ['/api/login', '/api/checkout']
});

本番環境チェックリスト

セキュリティ

  • secretSalt は環境変数に保存し、コードに決して記述しない
  • HTTPS + HSTS を有効化
  • CORS を自身のドメインに制限
  • Nonce TTL を 5 分以下に設定
  • セッションシークレットを定期的にローテーション
  • エンドポイントごとにレート制限を設定
  • リクエストフィンガープリントバインディングを有効化

パフォーマンス

  • detectionTimeoutMs を調整(1000〜2000ms推奨)
  • 最新ブラウザ向けにクリーンバンドル(botdetect-clean.min.js)を使用
  • 機密アクションの前にアイドル時に検出をプリロード
  • 本番環境で収集レイテンシを監視(performance.measure)

モニタリング

  • tamperScore > 0 のイベントをログ(シグナル改ざん試行)
  • friction === 'block' の割合を経時的に追跡
  • レート制限閾値違反をアラート
  • 四半期ごとに検出効果をレビュー(ボットは進化する)

テスト

root@kitploit:~
npm test              # 6スイート74のJestテスト
npm run typecheck     # TypeScript strictモード
npm run lint          # ESLint
npm run build         # Webpackプロダクションバンドル

ライセンス

Apache — Lahmeri Mohamed Amine

ツールをダウンロード
メソッド戻り値説明
getInstance(config?)Collectorシングルトンアクセサー
configure(config)void実行時に設定を更新
getConfig()CollectorConfig現在の設定
init()voidトラップ、トラッキング、ハニーポットを遅延初期化
enableTraps()voidDOM APIにスタックトレーストラップをインストール
enableBehavioralTracking()voidマウス/キーボード/スクロールの監視を開始
enableHoneypots(container?)voidハニーポットフィールドをインストール
collect()Promise<DetectionResult[]>すべての検出を実行
setNonce(nonce)voidサーバー発行のnonceを保存
getSessionId()string一意のセッション識別子
getFingerprint()stringセッションのフィンガープリントハッシュ
resetBehavioralData()void行動データをクリア
destroy()voidすべてのリスナーとDOM要素をクリーンアップ
メソッド戻り値説明
getInstance(config?)Detectorシングルトンアクセサー
configure(config)void設定を更新
analyze(results)DetectionVerdictスコアリング + 分類(ローカルデバッグのみ)
handleError(error)DetectionVerdictエラー時のフォールバック判定
/api/botdetect/verify
POST
シグナルを送信し、署名付き判定を受け取る
/api/botdetect/midcyclePOSTセッション途中での再検証
モジュール検出対象重み
webdrivernavigator.webdriver、seleniumプロパティ、getter記述子5
chromeDriverwindow上の重複ビルトイン、cache_ in document6
fakeCreateElement偽装された document.createElement7
toStringSpoofedFunction.prototype.toString の改ざん6
cdpDetectioncdc_*、__playwright__、__puppeteer__ グローバル、chrome.runtime7
stealthDetectionネイティブ関数の整合性(Notification、Navigator、Permissions、plugins、languages、canvas)5
inconsistentCloneError構造化クローンアルゴリズムの不整合5
iframeChromeRuntimeiframeコンテキスト内の chrome.runtime5
inconsistentChromeObjectiframeとメインウィンドウで chrome オブジェクトが異なる4
モジュール検出対象重み
canvasFingerprintキャンバスレンダリングの差異、ピクセル合計、ブランクキャンバス比率4
webglFingerprintSwiftShader、llvmpipe、Brian Paulレンダラー、シェーダー精度4
fingerprintConsistencyクロスチェック: canvas + WebGL + screen + navigator の一貫性4
audioFingerprintAudioContextのサンプルレート、周波数データの異常3
fontEnumeration限られたフォントセット(基本フォント15以下→ヘッドレス)3
timingAnomaliesperformance.now() の分解能、ループタイミング、rAF遅延、evalレイテンシ3
screenAnomaliesゼロ次元、色深度、利用可能領域の不整合3
performanceAnomaliesナビゲーションタイミング、メモリ、タイムオリジン、performance.now()3
navigationFlowPerformanceエントリ、pushStateトラッキング、リファラーの欠落3
querySelector/getElementById/eval の呼び出し元スタック分析
8
モジュール検出対象重み
webrtcCheckローカルIP公開、ICE候補の異常2
hardwareConcurrencyCPU数 vs メモリ比率、非現実的な値2
hiddenScrollヘッドレスでの隠しスクロールバー(デスクトップのみ)2
noHovermqホバーメディアクエリ未サポート(デスクトップのみ)1
webGLDisabledWebGL無効、SwiftShader1
inconsistentPermissionsPermission API状態の不一致4