このプロジェクトは、Chrome拡張機能をブラウザのサプライチェーン境界として扱います。 拡張機能はリモートコードを取得したり、広範なブラウザ権限を公開したり、YouTubeページのテキストを実行可能なコンテンツに変換したりしてはいけません。
- 権限の拡大、リモートコード、または予期せず公開されたウェブアクセス可能リソースを通じた拡張機能のサプライチェーンの妥協。
- 依存関係の混乱、未固定のパッケージの漂流、パッケージの整合性の欠如、およびオプションでないライフサイクルインストールスクリプト。
- 拡張機能ページまたはコンテンツスクリプトを通じたDOM/scriptインジェクション。
- ページテキストがデータのみとして扱われる場合のプロンプトインジェクション関連の悪用; チャットメッセージは決して実行可能なHTML、JavaScript、設定、またはモデル/ツールの指示にしてはいけません。
パッケージングの前に実行します:
npm run securityBunパス:
bun run security:bunゲートは以下の場合に失敗します:
manifest.jsonがManifest V3を離れる。- 権限が
storageを超えて拡大する。 host_permissionsが追加される; コンテンツスクリプトのmatchesがYouTubeインジェクションのスコープを持ち、拡張機能全体のホストアクセスを許可しない。- 拡張機能のCSPがインライン/eval/リモート/blob/dataスクリプトソースを許可する。
stage.html(弾幕ステージのフレーム。https://www.youtube.com/*から動的URL経由でのみ埋め込み可能)以外のウェブアクセス可能リソースが公開される。- 拡張機能のソースが
innerHTML、insertAdjacentHTML、document.write、eval、またはnew Functionのような危険なインジェクションシンクを使用する。 - 拡張機能のソースがネットワークフェッチやリモートスクリプト/スタイルのURLを追加する。
- npmパッケージの仕様が正確に固定されていない。
- ロックファイルのエントリが整合性メタデータを欠いているか、非レジストリのtarballを使用している。
- オプションでないnpmパッケージがライフサイクルインストールスクリプトを使用する。ただし、dev専用でパッケージ名が明示的な許可リストにある場合を除く。パッケージ名の判定はnpmロックファイル内の直接・ネスト配置に依存しない。
- 実行可能なJSとCSSは
extension/内に保持する。 - CDNスクリプト、リモートスタイルシート、またはランタイムでダウンロードされたロジックを追加しない。
- HTML文字列の挿入よりも
textContent、createElement、createElementNS、および固定CSSテキストを優先する。 - YouTubeチャットテキスト、著者名、ビデオメタデータ、およびページテキストは信頼できない表示データとしてのみ扱う。
- スタンドアロンのウェブリレーは許可リストに登録されたものに限定する: ビルトインのデフォルトリレー、同一オリジンのリレー、または明示的に信頼されたHTTPSオリジンのみ。デプロイメントが信頼されたリレーオリジンを追加する場合は、
SYC_TRUSTED_RELAY_ORIGINSとウェブCSPのconnect-srcの両方を更新する。 - リレー提供の
parts[].uを直接画像URLとして使用しない。カスタム絵文字URLはウェブサニタイザーを通過させ、許可された画像ホストをYouTube絵文字アセットとラスターデータ画像のモックアセットに制限する。 chrome.runtime.onMessageハンドラーは狭く保ち、メッセージのtypeと送信者の仮定を検証してから行動する。- 依存関係の追加は稀にする。パッケージが必要な場合は、正確に固定し、ロックファイルのエントリを確認し、
npm run securityを再実行する。
拡張機能にはLLM機能はありません。後で追加される場合、YouTubeチャットとメタデータは引用された信頼できないデータとして渡され、決して指示として渡されず、ツールの使用や外部送信は明示的で許可リストに登録されている必要があります。