Skip to content

暗号化の判断 ― 平文で保存したらどうなる?

📖この章のキーワード
用語意味なぜ重要か
encrypted castLaravel が自動で暗号化/復号する仕組みコード上は普通に使えるが DB には暗号文が入る
$hiddenAPI レスポンスや toArray() から除外するカラムフロントエンドへの露出を防ぐ
AES-256暗号化に使われるアルゴリズムAPP_KEY なしでは復号不可能
APP_KEYLaravel アプリケーションの暗号化キー.env に保存。漏洩厳禁

Phase 1: 観察

exemplar 秘密情報の保存方法として、積極的に擁護できる実装です。

Partner API のクレデンシャルモデルを見てみましょう。

php
// PartnerApiCredential.php
// Label: exemplar

class PartnerApiCredential extends Model
{
    // API レスポンスから除外するカラム
    protected $hidden = [
        'secret',
        'id',
        'partner_integration_id',
    ];

    protected $casts = [
        'secret' => 'encrypted',        // ← これ
        'scopes' => 'json',
        'ip_allowlist' => 'json',
        'last_used_at' => 'datetime',
        'expires_at' => 'datetime',
        'revoked_at' => 'datetime',
    ];
}

'secret' => 'encrypted' の 1 行。これが何を守っているのでしょうか。


Phase 2: 判断

AI禁止ゾーン
  • 'secret' => 'encrypted'外したら(平文保存にしたら)、何が危険ですか?
  • $hidden 配列は何のためにありますか? encrypted とは 何が違い ますか?
  • この 2 つは どちらか一方だけ で十分ですか?

AIに聞く前に、自分の頭で考えてみましょう。

テキストを入力すると有効になります