セキュリティ概要
環境変数には機密情報が保存されることが多く、安全な処理が極めて重要です。このドキュメントでは env ライブラリのセキュリティアーキテクチャとコア機能について概要を説明します。
セキュリティアーキテクチャ
text
┌──────────────────────────────────────────────────────────────┐
│ アプリケーション層 │
├──────────────────────────────────────────────────────────────┤
│ SecureValue │ マスク │ ゼロクリア │ メモリロック │
├──────────────────────────────────────────────────────────────┤
│ Loader 層 │
├──────────────────────────────────────────────────────────────┤
│ キー検証 │ 値の検証 │ 禁止キー │ サイズ制限 │
├──────────────────────────────────────────────────────────────┤
│ パース層 │
├──────────────────────────────────────────────────────────────┤
│ フォーマット検出 │ 展開チェック │ パス検証 │
└──────────────────────────────────────────────────────────────┘コアセキュリティ機能
| 機能 | 説明 | ドキュメント |
|---|---|---|
| SecureValue | 機密値のメモリ保護、自動ゼロクリア | SecureValue API |
| 禁止キー | システム重要変数の変更を防止 | 定数とエラー |
| 機密キー検出 | 機密設定キーの自動識別 | 定数とエラー |
| 値の検証 | 制御文字、ヌルバイトなどの検出 | Config API |
| 監査ログ | 完全な操作追跡 | コンポーネントファクトリー |
SecureValue の紹介
機密データには GetString ではなく GetSecure を使用します:
go
// 非推奨
password := env.GetString("DB_PASSWORD")
// 推奨
secret := env.GetSecure("DB_PASSWORD")
defer secret.Close()
password := secret.String()コア機能:
- メモリロック - ディスクへのスワップを防止(Linux/macOS/FreeBSD)
- 自動ゼロクリア -
Close()時にメモリを安全に消去 - マスク表示 -
Masked()はログ出力に使用 - スレッドセーフ - 並行読み取りをサポート
完全な API
詳細は SecureValue API を参照してください。
キー/値の検証
キーのバリデーション
デフォルトのキー名ルール:^[A-Za-z][A-Za-z0-9_]*$
- 英字で始まる
- 英字、数字、アンダースコアのみを含む
- 長さは
MaxKeyLengthを超えない
禁止キー
組み込みの禁止キーにより、システム重要変数の変更を防止します:
| カテゴリ | 例 | リスク |
|---|---|---|
| システムパス | PATH, LD_LIBRARY_PATH | コマンド/ライブラリのハイジャック |
| 動的リンク | LD_PRELOAD, DYLD_INSERT_LIBRARIES | 悪意のあるライブラリの注入 |
| Shell | SHELL, IFS, BASH_ENV | Shell のハイジャック |
| 言語ランタイム | PYTHONPATH, NODE_PATH | モジュールのハイジャック |
完全なリスト
完全な禁止キーリストは DefaultForbiddenKeys を参照してください。
値の検証
値の検証を有効にして潜在的な危険を検出します:
go
cfg := env.ProductionConfig()
cfg.ValidateValues = true // 制御文字、ヌルバイトなどを検出ファイルセキュリティの基本
ファイル権限
bash
# 所有者のみ読み書き可能
chmod 600 .env
# またはより厳格に(読み取り専用)
chmod 400 .envGit で除外
bash
.env
.env.local
.env.*.local
*.pem
*.key設定のセキュリティレベル
| プリセット | 用途 | 特徴 |
|---|---|---|
DevelopmentConfig() | 開発環境 | 緩やかな制限、YAML 構文をサポート |
TestingConfig() | テスト環境 | 既存変数の上書き、テスト分離 |
ProductionConfig() | 本番環境 | 厳格な検証 + 監査ログ、既存変数を上書きしない |
go
// 本番環境の推奨設定
cfg := env.ProductionConfig()
cfg.RequiredKeys = []string{"DB_HOST", "API_KEY"}
cfg.AllowedKeys = []string{"APP_NAME", "PORT", "DB_HOST", "API_KEY"}関連ドキュメント
- SecureValue API - セキュア値処理の完全な API
- 定数とエラー - 禁止キーの完全なリスト、機密キーパターン
- 本番チェックリスト - リリース前のセキュリティチェック