
Engagement Managerは、オフェンシブセキュリティエンゲージメントを追跡するためのWebアプリケーションです。Next.js、Prisma、PostgreSQLで構築されたモダンなUIを備えています。
Engagement Managerは、オフェンシブセキュリティエンゲージメントを追跡するためのWebアプリケーションです。Next.js、Prisma、PostgreSQLで構築されたモダンなUIを備えています。このアプリには、カレンダー、エンゲージメント、クライアント、連絡先、所見、オペレーターが含まれます。

| スキャナー/エクスポートファミリー | 受け入れられるエクスポート |
|---|---|
| Burp Suite | Issues XML (不活性な内部スキーマDTDを含む) |
| Nessus / Tenable | Nessus v2 XML (.nessus) |
| Nmap | XML。開いているポートとそのスクリプト出力は情報提供の観察事項となり、推測された脆弱性ではありません |
| OpenVAS / Greenbone | ネイティブXMLレポートまたはGMP get_reports_response |
| OWASP ZAP | サイトとアラートを含む従来のJSONレポート |
| Nuclei | JSON Lines (-jsonl) |
| Qualys | スキャン結果XML (SCAN/IP構造)。別個のホスト検出API形式ではありません |
| Semgrep / CodeQL およびその他のSARIFプロデューサー | SARIF JSONのruns、rules、results |
エクスポートは2 MB、1回のインポートあたり500所見に制限され、ユーザーごとのプレビューと確認のレート制限があります。アプリケーションは、手動作成、テンプレート、スキャナーインポートを通じて、合計最大10,000所見、1つのエンゲージメントにつき500所見を受け入れます。グローバルのFindingsリストは1ページあたり100行を読み込み、エンゲージメント/レポートの所見クエリは同じエンゲージメントごとの制限によって上限が設定されます。不明なレイアウトは、サイレントに成功したインポートとして扱われるのではなく、目に見える形で失敗します。スキャナーの重大度は提案です。承認前にそのコンテキストを確認してください。参照されたURL、HTML、埋め込みリモート画像は取得または実行されません。
レポートは1〜100所見、最大100の証拠画像 (各5 MB、合計入力20 MB)、500ページ、25 MBの出力を許可します。発行はエンゲージメントあたり50バージョン、アプリケーション全体で発行されたPDFは1 GBに制限されます。プレビューと発行にはユーザーごとのレート制限があり、アプリケーションプロセスごとに一度に1つのPDFレンダリングのみが許可されます。所見は最大1000リビジョンと500コメントを保持します。制限に達すると、履歴を上書きせずに失敗します。DejaVuフォントとその再配布ライセンスはassets/fontsに含まれています。デプロイメントはこれらのアセットを保持する必要があります (Nextの出力トレースに含まれます)。
Next.js Server Actionsは、証拠アップロード用に単一の25mbボディサイズ制限 (next.config.tsで設定) を共有します。ログインは、認証またはデータベース処理の前に4 KBのストリーミング制限を持つ専用の同一オリジンURLエンコードルートを使用します。
これは、新しいクライアントごとのテナンシーモデルではなく、既存の共有認証ワークスペースを維持します。すべての新しいページ、アクション、PDFダウンロードは、現在のデータベースに裏付けられたセッションをチェックします。下書きはその所有者にスコープされ、レビュー、テンプレート承認、発行の権限はサーバー側で強制されます。機密PDFレスポンスはprivate/no-storeです。最終PDFには、明示的なレポートフィールドの許可リストのみが含まれ、プライベート下書き、レビューコメント、無関係なエンゲージメントは含まれません。
実装はOWASP Top 10:2025チェックリストを使用しています: アクセスチェック (A01)、プライベートレスポンスと既存のCSP/CSRFコントロール (A02)、固定された依存関係とCI (A03)、既存のセッション/シークレット保護とレポート整合性チェック (A04/A08)、不活性なMarkdown/XMLとパラメーター化されたデータベースアクセス (A05)、境界付き処理と独立したレビュー (A06)、ライブセッションチェック (A07)、コンテンツフリーの監査イベント (A09)、失敗時のクリーンアップを伴うトランザクション変更 (A10)。ダイジェストは偶発的な破損を検出しますが、デジタル署名やデータベース管理者からの保護ではありません。これはコンプライアンス認証ではありません。本番環境では依然としてHTTPS、保護されたデータベース/バックアップストレージ、監査出力の運用監視が必要です。
このアップグレードをデプロイする前に、通常のアプリケーションバックアップを取得し、追加的な20260904221808_reporting_workflowおよび20260906194500_add_revocable_sessionsマイグレーションをnpm run db:migrateで適用してから、Prisma Clientを再生成してリビルドします。既存の所見はバージョン1のDraftとして開始され、既存のブラウザCookieはサーバーに裏付けられたセッションIDを受け取るために再度サインインする必要があります。既存のデータベースをリセットしないでください。バックアップには、既存のフルデータベースエクスポートを通じて新しいテーブルと発行されたPDFが含まれます。
npm test npm run lint npx tsc --noEmit --noUnusedLocals --noUnusedParameters npm run build npm audit
`npm test` は Node の非分離テストモードを `tsx` と共に使用するため、個々の TypeScript テストケースが実行され、ファイルサブプロセスの成功を報告するだけにはなりません。明示的なアサーションの合計を CI で可視化したままにしてください。
データベースとブラウザのリグレッションには、マイグレーションが適用された **`reporting_tests` という名前の専用ローカルデータベース** が必要です。これらのテストは自身のフィクスチャ行を作成および削除します。これらのテストをアプリケーションのデータベースに向けないでください。`REPORTING_TEST_DATABASE_URL` をそのテストデータベースに設定し、次を実行します:```bash
DATABASE_URL="$REPORTING_TEST_DATABASE_URL" npx prisma migrate deploy
npm run test:reporting
npx playwright install chromium
npm run test:browser
ブラウザスイートは、テスト専用のセッションシークレットを使用してポート3317で独自のループバック開発サーバーを起動します。既存のサーバーの再利用は拒否します。必要に応じて、インストール済みのChromium実行ファイルをREPORTING_TEST_BROWSERに設定してください。このスイートは、下書きのプライバシー、競合する編集、証拠のアップロード、独立したレビュー、PDFの権限/不変性、JavaScriptなしでのテンプレート作成、および選択的な重複排除インポートをテストします。統合テストでは、実際のトランザクション競合とロールバックを検証します。これらのスイートは、リモートLAN、Safari、または本番デプロイメントの検証を代替するものではありません。
このアプリケーションはUbuntu上で動作するように設計されており、以下が必要です:```bash sudo apt update && sudo apt install -y nodejs npm postgresql postgresql-client postgresql-contrib zip
`postgresql-client` は `pg_dump`、`pg_restore`、`psql` を提供し、`zip` はバックアップアーカイブを作成します。リストア時の展開は、厳格なエントリおよびサイズの検証を伴ってアプリケーション側で処理されます。
パッケージをインストールしても、PostgreSQL が常に稼働状態になるとは限りません。ロールを作成したりアプリを起動したりする前に、サービスを起動して有効化してください:```bash
sudo systemctl enable --now postgresql
sudo systemctl status postgresql --no-pager
アプリが後で Can't reach database server at 127.0.0.1:5432 で失敗する場合は、sudo systemctl start postgresql を実行し、pg_isready -h 127.0.0.1 -p 5432 で確認してください。
アプリには Node.js ^22.12.0 または >=24.0.0 が必要です(package.json の engines を参照)。OS のパッケージが古い場合は、setup.sh を実行する前に署名を検証した信頼できるパッケージソースからサポート対象のリリースをインストールしてください。