流れはひとつ。スタックは、より広く。
プロジェクトをスキャンし、エコシステムの方針を選んでから、そのセキュリティ更新をアプリケーションで検証します。
プロジェクトを確かめる
ソース版のプレビュー · Node 24 以上 · 取得と検証に Docker。公開済みの npm 0.1.4 には、これらのコマンドは入っていません。
このソースのリビジョンをビルドしてから、次を実行します。
node packages/cli/dist/cli.js scan --dir /path/to/app/path/to/app は、プロジェクトのディレクトリに置き換えてください。scan は、対応しているロックファイルと、設定した PHP の Dockerfile を見つけます。Maven は、マニフェストだけを入れたコンテナで依存関係グラフを解決します。元のプロジェクトは変更しません。
PHP Docker · npm · Composer。Maven はスキャンだけで、更新はしません。使えないデータベースや対応していない一覧は、見える形で残します。本番を自動でデプロイし直すことはありません。
見つけてから、検証済みの更新まで
1 · ソース版のプレビューをビルドする今の npm のインストールとは分けておく
複数スタック対応のソースのリビジョンを使います。これらのコマンドはデフォルトブランチにあり、下の clone でそのブランチを取得します。
git clone https://github.com/Ludion-ai/ludion.git
cd ludion
npm ci
npm run build -w ludion-ai2 · エコシステムとテストを選ぶ検証の前に必要
php、npm、composer から選びます。Maven はスキャンだけなので、init は受け付けません。プロジェクトは、複数のエコシステムをまとめてスキャンできます。保存する patch の方針で選べるのは、一度にひとつのマネージャーです。
node packages/cli/dist/cli.js init --dir /path/to/app --ecosystem npmludion.security.json を編集し、アプリケーションに合う公式のツールイメージと、実際にオフラインで動くテストコマンドを選びます。npm の取得には npm 12.2.1 を使います。Node のツールイメージは、このバージョンに対応している必要があります。
{
"schema": 1,
"ecosystem": "npm",
"image": "node:24-slim",
"test": [
"npm",
"test"
],
"timeout_seconds": 120
}テストは、プロジェクトを読み取り専用にしたまま動き、対応している作業領域にだけ書き込む必要があります。
3 · 検証してから適用するブランチは指定したときだけ
依存関係を別に取得し、更新前(ベースライン)と更新後(候補)のテストをオフラインで実行して、候補の一覧を確かめ直します。
node packages/cli/dist/cli.js patch --dir /path/to/appもう一度検証し、単独で通った修正をひとつずつコミットするには、次を実行します。
node packages/cli/dist/cli.js patch --dir /path/to/app --apply--apply は、手元のファイルも今のブランチも変えません。修正はひとつずつ、それぞれ新しいブランチ ludion/<ecosystem>/<package>-<version> の、ひとつのコミットになり、どこにも push しません。ほかの修正といっしょのときだけ通る修正は、適用しません。ブランチがすでにある修正は、もう一度は適用しません。インストール済みのどれかのパッケージに OSV の悪性パッケージ記録(MAL-)があると、その実行のすべての修正を止めます。
--apply には、プロジェクトの外にインストールした git と、ファイルが最後のコミットとまったく同じ Git リポジトリが必要です。コミットしていないファイル、追跡していないファイル、無視しているファイル(node_modules と .env のファイル、npm・Composer では最上位の vendor と target を除く)、Git LFS、サブモジュール、フックを指定する Git の設定があると、実行を断ります。検証だけなら、--apply を付けずに実行してください。
記録(レシート)は .ludion/security/ で確かめてください。npm と Composer は、同じメジャーバージョンの中で依存関係の制約を調整し、ロックファイルを作り直すことがあります。メジャーバージョンの修正と、解決できなかったものは、確認が必要です。ブランチをマージしてから、いつもの手順でデプロイしてください。
4 · 自動で確かめ続けるプロセスが動いている間
保存したエコシステムの方針を、900 秒ごとにくり返します。
node packages/cli/dist/cli.js watch --dir /path/to/app --apply --interval 900Ctrl+C で停止を求めます。途中の Docker の処理は最後まで進むことがありますが、取り消しを受け取った後はブランチを作りません。次の実行では、ブランチがすでにある修正を飛ばします。
手元から外へ出るもの送る内容と境界
OSV(api.osv.dev)には、パッケージ名と正確なバージョンを送り、返ってきたアドバイザリーの ID を OSV に送り返します。Composer のパッケージ名は、Packagist のアドバイザリーの一覧(packagist.org)にも送ります。バージョン、公開の時刻、来歴を読むために、npm のパッケージ名とバージョンを npm レジストリ(registry.npmjs.org)に、Composer のパッケージ名を Packagist(repo.packagist.org)に送ります。PHP のリリースの一覧は www.php.net から読み、そのとき 8.4 のような PHP のブランチを送ります。Node.js のリリースの一覧は nodejs.org から丸ごとダウンロードします。CISA の悪用されている脆弱性のカタログ(www.cisa.gov)と、FIRST の毎日の EPSS スコアの一覧(epss.empiricalsecurity.com)は丸ごとダウンロードするので、CVE の ID は送りません。定期実行のワークフローの PR のジョブは、ワークフローのトークンで GitHub を使い、リポジトリとその PR を読み、修正ごとのコミットをそれぞれのブランチに push し、パッケージ名、バージョン、アドバイザリーの ID、レシートの時刻をタイトルと本文に載せた PR を開きます。また、公式の PHP または Node.js イメージのタグのダイジェストを Docker Hub(auth.docker.io、registry-1.docker.io)に問い合わせます。ツールイメージは、公式の PHP イメージも含めて、お使いの Docker デーモンを通して、そのデーモンに設定されたレジストリから取ります。npm のパッケージは、URL・Git・ファイルの取得元を無効にして registry.npmjs.org から取り、Maven のリポジトリはミラーの設定で公開の Central(repo.maven.apache.org)に向けます。Composer の ZIP は、github.com、api.github.com、codeload.github.com、bitbucket.org にあるコミットで固定したアーカイブからだけ取り、リダイレクトのたびに次のリクエストの前に確かめます。
アプリケーションのソースは、オフラインのテストのために、設定した Docker デーモンへ送ります。手元から出さないためには、ローカルのデーモンを選んでください。ソースを Ludion にアップロードすることはなく、セキュリティのコマンドはテレメトリーを送りません。オンラインでの取得に含めるのはマニフェストだけです。ソースのスナップショットからは .env ファイル、Git の履歴、よくある認証情報のディレクトリを除きますが、秘密情報を広く探すスキャナーではありません。このウェブサイトは Google アナリティクスを使っています。
扱うのは、既知の脆弱性情報と、記録したアプリケーションのテストだけです。当てはまるものが無くても、安全の保証ではありません。対応する範囲と、扱えないものは、はっきり示します。