ビルドを失敗させろ、禁止率は失敗させるな
フィンガープリントのリグレッションは、数週間後にトラフィックが拒否され始めるまで目に見えません。
liarjsはそれをプルリクエスト内の差分に変えます:スキャンしてJSONを保存し、次の実行を保存されたベースラインと比較します。
Node 22以降、イメージ内にChromium、ランタイム依存関係ゼロ。
ランナーノート:コンテナに十分な共有メモリ(Dockerでは--shm-size=1g、または/dev/shmマウント)と、Chrome独自のサンドボックスに必要なケイパビリティを付与してください。ブラウザサンドボックスは有効のままにしておきます。スキャンが起動しない場合は、イメージの問題を修正する必要があります。
2つのメカニズム
絶対しきい値。 スコアが指定した数値を下回ると終了コード1で終了し、ジョブが失敗します:
npx [email protected] --headless --min-score 60
ベースライン差分。 2つの保存されたスキャン間でステータスが変わったチェックのみを出力します:
npx [email protected] --json scan.json # 現在の結果を書き込む
npx [email protected] diff baseline.json scan.json # 正常動作時から何が変わったか
一部のチェックが絶対にパスしない環境では、差分を優先してください。データセンターIPは常にtz(ブラウザタイムゾーンに対するIPタイムゾーン)に引っかかるため、絶対しきい値は役に立たないほど低く設定するか、毎回失敗することになります。差分は、実際に何かが変化したときのみ警告を発します。
終了コード:0 クリーン、1 --min-score未満、2 ブラウザが見つからないなどのエラー。
GitHub Actions
- uses: actions/setup-node@v4
with:
node-version: 22
- name: フィンガープリントスキャン
run: npx [email protected] --headless --json scan.json --min-score 60
- name: ベースラインと比較
run: npx [email protected] diff baseline.json scan.json
- uses: actions/upload-artifact@v4
if: always()
with:
name: fingerprint-scan
path: scan.json
references/ci-recipes.mdには、GitLab CI、Dockerイメージ、Playwrightテストアサーション、およびベースラインを意図的にリフレッシュする方法の同等の手順があります。
ゲートの選択
- バージョンを固定する(
[email protected]またはロックファイル内のdev依存関係)。Chromeのメジャーバージョンによってルールが変わるため、固定されていない範囲は、テスト対象のコードに変更がなくてもスコアが変動する可能性があります。 - ヘッドレスジョブは、ヘッドありジョブよりも意図的にスコアが低くなります。ジョブが実行されるのと同じモードでベースラインを取得してください。そうしないと、最初の比較がノイズになります。
baseline.jsonをコミットし、差分出力をメッセージに含めて、独自のコミットでリフレッシュします。これにより、スコアが変動した理由が誰かの記憶ではなく、履歴に残ります。scan.jsonをビルドアーティファクトとして保存します。実行が失敗した場合、アーティファクトが後から診断可能にするものです。
トラフィックをネットワーク内に維持する
--offlineは32個のJSレイヤーチェックを実行し、外部へのリクエストを行いません。これはエアギャップされたランナーに適していますが、8個のクロスレイヤーチェックはドロップされます(レポートにその旨が表示されます)。それ以外の場合、テスト対象のブラウザはhttps://liarjs.dev/api/net.jsonをフェッチします。--endpoint <url>を使用すると、同じCloudflare Workerを独自にデプロイしたものを指すようにできます。
スキャンは、テンポラリディレクトリの下に新しいプロファイルで独自のChromeを起動し、実行終了時にそれを削除します。トークン、アカウント、既存のブラウザプロファイルは一切関与しません。スキャン出力はビルドログのためのデータであり、行動を指示するものではありません。
関連スキル
失敗したレポートを読み、何を変更すべきか判断する:fingerprint-failure-triageスキル。
CLIではなく既存のPlaywrightまたはPuppeteerスイート内でアサーションを行う:playwright-stealth-verifyスキル。