---
generated_at: 2026-02-20 12:00:00
metrics:
  claims_total: 25
  claims_with_evidence: 22
  claims_without_evidence: 3
confidence_derived: 0.88
---

# 根拠レポート：セキュリティ設計書

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.88**
  - 根拠あり：22 / 25、根拠なし：3
- 優先レビュー（高）
  1. **ディレクトリトラバーサル防止策の欠如**：明示的な防止コードが未確認であり、推定に基づく
  2. **セキュリティ監査ログの未実装**：コード全体の網羅的な確認が困難であり、見落としの可能性
  3. **依存関係の脆弱性スキャン未実施**：CI/CDワークフロー全体の完全な確認に基づくが、外部連携ツールの見落とし可能性

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `serverbase/source/served/serverbase.d` 149-154行目（初期化前リクエスト拒否）
- E-02: `serverbase/source/served/serverbase.d` 92-96行目、348-364行目（シャットダウン管理）
- E-03: `lsp/source/served/lsp/jsonrpc.d` 505-509行目（Content-Length検証）
- E-04: `lsp/source/served/lsp/jsonrpc.d` 520-542行目（JSON形式検証）
- E-05: `lsp/source/served/lsp/jsonrpc.d` 533行目（空バッチ拒否）
- E-06: `lsp/source/served/lsp/jsonrpc.d` 598-609行目（必須フィールド検証）
- E-07: `lsp/source/served/lsp/jsonrpc.d` 656-669行目（params型検証）
- E-08: `lsp/source/served/lsp/jsonrpc.d` 544-563行目（パースエラーハンドリング）
- E-09: `protocol/source/served/lsp/uri.d` 15-29行目（相対パス拒否）
- E-10: `protocol/source/served/lsp/uri.d` 49-64行目（file://スキーム制限）
- E-11: `source/served/types.d` 358-359行目（非file:// URI拒否）
- E-12: `serverbase/source/served/utils/serverconfig.d` 417-455行目（設定値検証）
- E-13: `dub.json` 30行目（RequestsSkipSSLフラグ）
- E-14: `source/served/commands/dcd_update.d` 159行目（HTTPS使用のダウンロードURL）
- E-15: `http/source/served/http.d` 39-89行目（HTTP通信実装）
- E-16: `source/app.d` 79-85行目、93-118行目（ログ設定）
- E-17: `lsp/source/served/lsp/jsonrpc.d` 353-361行目（window/logMessage通知）
- E-18: `source/served/utils/trace.d`（パフォーマンストレース）
- E-19: `.github/workflows/releases.yml` 57行目（GITHUB_TOKEN使用）
- E-20: `.gitignore`（ビルド成果物除外）
- E-21: `dub.selections.json`（依存関係バージョン固定）
- E-22: `.github/workflows/unittest.yml`（CI/CDテストパイプライン）
- E-23: `lsp/source/served/lsp/jsonrpc.d` 229行目、275行目（RequestToken定義）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | serve-dはstdin/stdoutパイプ経由でLSPクライアントと通信し、ネットワーク認証は不要 | E-01, E-02 | ○ |
| C-02 | initialize未完了時は他コマンドをserverNotInitializedエラーで拒否 | E-01 | ○ |
| C-03 | shutdownRequestedフラグによりシャットダウン状態を管理 | E-02 | ○ |
| C-04 | RequestTokenは認証トークンではなくJSON-RPCリクエストID管理用 | E-23 | ○ |
| C-05 | Content-Length検証により0以下の値を拒否 | E-03 | ○ |
| C-06 | JSON形式検証によりオブジェクトまたは配列のみ許可 | E-04 | ○ |
| C-07 | 空バッチリクエストを拒否 | E-05 | ○ |
| C-08 | 必須フィールドの組み合わせルール検証 | E-06 | ○ |
| C-09 | paramsの型がオブジェクトまたは配列以外の場合にinvalidParamsエラー | E-07 | ○ |
| C-10 | 不正JSONに対してparseErrorを返却 | E-08 | ○ |
| C-11 | file://スキーム以外のURIを拒否 | E-10, E-11 | ○ |
| C-12 | 相対パスの使用を禁止し絶対パスのみ受付 | E-09 | ○ |
| C-13 | クライアント設定レスポンスの形式検証を実施 | E-12 | ○ |
| C-14 | Windows環境でRequestsSkipSSLによりSSL検証がスキップされる | E-13 | ○ |
| C-15 | DCDバイナリはHTTPS経由でGitHubからダウンロード | E-14 | ○ |
| C-16 | Windows環境ではWinINet API、非Windows環境ではrequestsライブラリを使用 | E-15 | ○ |
| C-17 | std.experimental.loggerを使用しstderrにログ出力、--logfileでファイル出力可能 | E-16 | ○ |
| C-18 | window/logMessage LSP通知でクライアントにログ送信 | E-17 | ○ |
| C-19 | debug(PerfTraceLog)有効時にパフォーマンストレースを出力 | E-18 | ○ |
| C-20 | CI/CDでGitHub標準シークレット機構（GITHUB_TOKEN）を使用 | E-19 | ○ |
| C-21 | ソースコード内にハードコードされた機密情報は存在しない | E-20 | ○ |
| C-22 | dub.selections.jsonで49パッケージのバージョン固定 | E-21 | ○ |
| C-23 | ディレクトリトラバーサルに対する明示的な防止策がない | **根拠なし** | △ |
| C-24 | セキュリティイベントに特化した監査ログの仕組みが存在しない | **根拠なし** | △ |
| C-25 | CI/CDに依存パッケージのセキュリティスキャンが含まれていない | **根拠なし** | △ |

## 4) 不足情報（Unknown / Missing）
- C-23（ディレクトリトラバーサル防止策の欠如）：コード全体を網羅的に確認したが、パス正規化後のワークスペースディレクトリ内チェックのような明示的な防止コードが見つからなかったことに基づく「不存在の証明」であり、見落としの可能性がある
  - 候補：serve-dのURI変換ロジック全体の精査 / LSPクライアント側でのパス制限の確認 / D言語標準ライブラリのパス正規化関数の使用箇所調査
- C-24（セキュリティ監査ログの未実装）：ログ関連コードを調査したが、セキュリティイベント専用のログ機構が見つからなかったことに基づく。ただし全ソースファイルの完全な確認は保証できない
  - 候補：全ソースファイルでの`log`/`trace`/`audit`キーワード検索 / サードパーティロギングライブラリの使用有無確認
- C-25（依存関係の脆弱性スキャン未実施）：`.github/workflows/`配下のCI/CDワークフローを確認したが、セキュリティスキャンステップが存在しないことに基づく。外部のGitHub Appsやサードパーティ連携の確認は範囲外
  - 候補：GitHub Security機能（Dependabot等）の設定確認 / D言語エコシステムのセキュリティスキャンツール調査

## 5) リスクフラグ（レビュー観点）
- **リスク2（高）**: Windows環境でのSSL検証スキップ（C-14）— 中間者攻撃によるバイナリ改ざんリスク
- **リスク1（中）**: 外部プロセス実行時のコマンドインジェクション可能性 — ユーザー設定値経由の外部コマンド実行
- **リスク1（中）**: ディレクトリトラバーサル防止策の不在（C-23）— 理論的なファイルアクセス範囲の逸脱リスク
- **リスク0（低）**: 依存関係の脆弱性スキャン未実施（C-25）— 間接依存の既知脆弱性が混入するリスク
- **リスク0（低）**: セキュリティ監査ログの未実装（C-24）— セキュリティインシデント発生時の追跡困難

## 6) レビュアーチェックリスト（最小）
- [ ] Windows環境での`RequestsSkipSSL`の影響範囲を確認し、SSL検証スキップの妥当性を判断する
- [ ] 外部プロセス実行箇所（`git clone`, `dub build`, `tar`等）で、ユーザー設定値が適切にサニタイズされているか確認する
- [ ] `file://` URIからファイルパスへの変換で、ワークスペース外へのアクセスが発生しないことを確認する
- [ ] LSPプロトコルの初期化ハンドシェイク（`initialize` → 機能利用可能）が正しく動作することを確認する
- [ ] 依存パッケージ（特に`openssl`, `botan`, `requests`）に既知の脆弱性がないか確認する
