# セキュリティ設計書

## 概要

本ドキュメントは、Tailwind CSS（CSSユーティリティフレームワーク/ビルドツール）のセキュリティ設計について記載する。Tailwind CSSはWebアプリケーションではなく、CSSビルドツール/ライブラリであるため、一般的なWebアプリケーションセキュリティ（認証・セッション管理・CORS等）は対象外となる。本プロジェクトにおけるセキュリティの主眼は、**CSS入力値の安全なパース・バリデーション**、**エスケープ処理**、**ファイルシステムアクセスの制御**、**依存パッケージの管理**に置かれている。

## 認証設計

### 認証方式

該当なし。Tailwind CSSはCSSビルドツール/ライブラリであり、ユーザー認証機能は実装されていない。認証はホストアプリケーション側の責務となる。

### セッション管理

| 項目 | 設定値 | 備考 |
| --- | --- | --- |
| セッション有効期限 | 該当なし | ライブラリのため対象外 |
| セッション固定化対策 | 該当なし | ライブラリのため対象外 |

## 認可設計

### 権限体系

| ロール | 権限 | 説明 |
| --- | --- | --- |
| 該当なし | 該当なし | ライブラリのためロールベース認可は未実装 |

### アクセス制御

本プロジェクトはビルドツールとしてファイルシステムにアクセスする。ファイルシステムアクセスの制御は以下の方式で行われている。

1. **モジュール解決の制限**（`packages/@tailwindcss-node/src/compile.ts:199-243`）
   - `enhanced-resolve` ライブラリを使用し、CSS・ESM・CJSの各解決パスを明示的に設定
   - 解決対象の拡張子を `.css`, `.js`, `.json`, `.node`, `.ts` に制限
   - モジュール検索パスを `node_modules` と `NODE_PATH` 環境変数で指定されたパスに限定

2. **グロブパターンによるファイル走査**（`crates/oxide/Cargo.toml`）
   - Rust（Oxide）コンポーネントで `globwalk`, `fast-glob`, `walkdir` を使用
   - `ignore` クレートにより `.gitignore` パターンを尊重し、不要なファイルを除外

## 通信セキュリティ

| 項目 | 対策 |
| --- | --- |
| HTTPS | 該当なし（ビルドツールのため通信層は対象外。ホストアプリケーション側で設定） |
| HSTS | 該当なし（同上） |

## データセキュリティ

### 暗号化

| 対象 | 暗号化方式 |
| --- | --- |
| 通信 | 該当なし（ビルドツールのため対象外） |
| 保存データ | 該当なし（暗号化対象のデータを保持しない） |

### 機密情報管理

本プロジェクトでは以下の環境変数を使用しており、機密情報は含まれない。

| 環境変数 | 用途 | ファイル |
| --- | --- | --- |
| `NODE_ENV` | 本番/開発モードの判定（CSS最適化制御） | `packages/@tailwindcss-postcss/src/index.ts:73` |
| `NODE_PATH` | モジュール解決の追加パス | `packages/@tailwindcss-node/src/compile.ts:197` |
| `DEBUG` | デバッグログ出力の制御 | `packages/@tailwindcss-node/src/env.ts:1-44` |

- `.env` ファイルの自動ロード機能は実装されていない（dotenvパッケージ未使用）
- 環境変数は `process.env` を通じた直接参照のみ
- 機密情報（APIキー、パスワード等）の管理は不要

## 入出力対策

| 脅威 | 対策 |
| --- | --- |
| XSS | CSS値のエスケープ処理をW3C CSS仕様に準拠して実装（`packages/tailwindcss/src/utils/escape.ts:2-82`）。NULL文字は置換文字（U+FFFD）に変換、制御文字は16進エスケープ、特殊文字はバックスラッシュエスケープを適用 |
| SQLインジェクション | 該当なし（データベースを使用しない） |
| CSRF | 該当なし（HTTP通信を行わないビルドツールのため対象外） |

### CSS入力値バリデーション

Tailwind CSSの中核的なセキュリティ対策として、ユーザーが指定するCSS任意値（arbitrary values）に対する厳格なバリデーションが実装されている。

#### 任意値の妥当性検証（`packages/tailwindcss/src/utils/is-valid-arbitrary.ts:27-93`）

- 括弧 `()`, 角括弧 `[]`, 波括弧 `{}` のバランスチェック（スタックベース）
- トップレベルのセミコロン `;` を禁止（CSSインジェクション対策）
- エスケープ文字（`\`）の適切な処理

#### 任意値のデコード処理（`packages/tailwindcss/src/utils/decode-arbitrary-value.ts:4-74`）

- アンダースコア `_` から空白への安全な変換
- `var()` / `theme()` 関数内のアンダースコアは変換対象外として保護
- `url()` 関数内のアンダースコアも保護
- エスケープされたアンダースコア `\_` は文字リテラルとして保持

#### CSSセグメント分割（`packages/tailwindcss/src/utils/segment.ts:29-102`）

- トップレベルのセパレータでのみ入力を分割
- ネストされた括弧・引用符内のセパレータは無視
- エスケープ文字の適切な処理

#### CSS属性セレクタパーサー（`packages/tailwindcss/src/attribute-selector-parser.ts`）

- 属性名の文字集合チェック
- 演算子の検証（`=`, `~=`, `|=`, `^=`, `$=`, `*=` のみ許可）
- 引用符の適切な処理とエスケープ管理

### CSSエスケープ処理（`packages/tailwindcss/src/utils/escape.ts:2-82`）

W3C CSS仕様に準拠した `escape()` / `unescape()` 関数を実装。

| 入力 | 処理 |
| --- | --- |
| NULL文字（`0x0000`） | 置換文字 `U+FFFD` に変換 |
| 制御文字（`0x0001`-`0x001F`, `0x007F`） | 16進エスケープ（`\XX `） |
| 先頭が数字 | バックスラッシュエスケープ |
| `-` の後に数字 | バックスラッシュエスケープ |
| その他の特殊文字 | バックスラッシュエスケープ |

### URL安全性検証（`packages/@tailwindcss-node/src/urls.ts:13-160`）

CSS内のURL参照に対して、安全な書き換えとスキップ判定を実装。

| URL種別 | 処理 |
| --- | --- |
| 外部URL（`http://`, `https://`） | 書き換えスキップ |
| データURI（`data:`） | 書き換えスキップ |
| 絶対パス（`/`始まり） | 書き換えスキップ |
| 関数呼び出し（`var()`, `env()`） | 書き換えスキップ |
| 相対URL | ルートからの相対パスに安全に変換 |

## 監査ログ

| ログ種別 | 記録内容 | 保持期間 |
| --- | --- | --- |
| デバッグログ | ビルドプロセスの詳細情報。`DEBUG` 環境変数で制御（`packages/@tailwindcss-node/src/env.ts:1-44`）。`DEBUG=tailwindcss` または `DEBUG=*` で有効化 | セッション中のみ（永続化なし） |
| トレーシング | Rust（Oxide）コンポーネントの処理追跡。`tracing` / `tracing-subscriber` クレートを使用 | セッション中のみ（永続化なし） |
| ビルド警告 | CSS最適化時の警告。本番環境以外（`NODE_ENV !== 'test'`）で出力 | セッション中のみ（永続化なし） |

## 依存パッケージのセキュリティ管理

### パッチ管理

pnpmのパッチ機能を用いて、依存パッケージへのセキュリティパッチを適用している。

| パッケージ | パッチファイル |
| --- | --- |
| `lightningcss@1.31.1` | `patches/lightningcss@1.31.1.patch` |
| `@parcel/watcher@2.5.1` | `patches/@parcel__watcher@2.5.1.patch` |

### モジュールローダーの安全性（`packages/@tailwindcss-node/src/compile.ts:177-195`）

- `jiti` を使用したTypeScriptモジュールの動的読み込み
- モジュールキャッシュ無効化（`moduleCache: false`）でキャッシュポイズニングを防止
- ファイルシステムキャッシュ無効化（`fsCache: false`）で陳腐化したキャッシュの使用を防止
- `globalThis.__tw_load` によるカスタムローダーのサポート（フレームワーク統合用）

## 備考

- Tailwind CSSはCSSビルドツール/ライブラリであるため、Webアプリケーション固有のセキュリティ対策（認証・認可・セッション管理・CSRF・CORS等）は対象外である
- セキュリティの主眼は、ユーザーから提供されるCSS入力値の安全なパースとバリデーションに置かれている
- CSSインジェクション対策として、任意値内のセミコロン禁止、括弧バランスチェック、CSS仕様準拠のエスケープ処理が実装されている
- Rust（Oxide）コンポーネントはメモリ安全性をRust言語レベルで保証しており、バッファオーバーフロー等の脆弱性リスクが低い
- 依存パッケージにはpnpmパッチを通じてセキュリティ修正が適用されている
