テーマのセキュリティとリリース
第三者のテーマはサプライチェーン入力です。プラットフォームの検証とサンドボックスはリスクを縮小しますが、ソースレビュー・ライセンス確認・再現可能なリリースの代替にはなりません。
プラットフォーム検証の上限
| 項目 | 制限 |
|---|---|
| ZIP 圧縮サイズ | 最大 8 MiB |
| 展開後合計 | 最大 16 MiB |
| 1 ファイル | 最大 4 MiB |
| ファイル数 | 最大 300 |
manifest.json | 最大 64 KiB、UTF-8 JSON |
| パス深度 | 最大 8 階層 |
| 単一パス長 | 最大 180 文字 |
| CSS ファイル | CSS テーマで 1〜4 個 |
| Canvas 高さ | 400-12000 |
アップロードは ZIP Content-Type を使用し、ブラウザ計算の x-theme-sha256 を携帯する必要があります。Worker はパッケージ全体の SHA-256 を再計算し、不一致なら拒否します。x-extension-sha256 は旧テーマクライアント向けの互換ヘッダーに過ぎず、プラグイン機能を意味しません。新しいツールは x-theme-sha256 を送信します。
マニフェスト検証
schemaはnie-sla-theme-v1でなければならない。idは 3〜49 文字の小文字英字・数字・ハイフンで英字始まり。公開後も安定させる。versionは SemVer でなければならない。typeは固定でtheme。- CSS モードはパッケージ内スタイル 1〜4 個、Canvas モードはエントリ HTML が必要。
permissionsは["status:read"]のみ。filesを宣言する場合、ZIP 内のファイルと完全一致しなければならない。- パスは NFC Unicode。絶対パス・バックスラッシュ・
..・制御文字・重複パスは拒否。 - 許可されるのは
.css・.html・.js・.json・一般的なウェブ画像形式・WOFF/WOFF2 フォント。
サプライチェーンとリリース
- ソースからクリーンな成果物をビルドし、開発サーバーの出力を使わない。
- 作者・バージョン・ライセンス・ソースリポジトリを明示し、公式テーマを偽装しない。
- ZIP の SHA-256 を別途公開する:
shasum -a 256 theme.zip。 - 更新は
idを保ち SemVer を上げる。上書きアップロード後は管理者が再度有効化する。 - テストデプロイで検証してから本番で有効化する。
- ZIP 内に拡張子なしライセンスファイルや Markdown を入れない。ライセンスはソースリポジトリとリリースページに置く。
実行時分離
CSS テーマはスクリプトを実行しません。Canvas テーマは同一オリジン権限のない sandbox iframe で動作し、CSP が直接のネットワーク・フォーム・トップレベルナビゲーションを禁止し、データはメッセージプロトコルのみで届きます。プラグインアップロード API とプラグインランタイムは開放されていません。
管理者は信頼できるソースのテーマのみを有効化してください。プラットフォーム検証は誤送信と一般的な回避を防ぎますが、意図的にテーマを汚染する悪意ある作者は防げません。ソースレビューとライセンス確認は管理者の責任です。