【はーどこーどされたにんしょうじょうほう】
ハードコードされた認証情報 とは?
公開:
💡 配るアプリの中に、共通の合鍵を入れない
ハードコードされた認証情報は、パスワードや秘密のAPIキーなどをプログラムへ固定で埋め込んだ状態。配布されたアプリから取り出されるなどして、不正なアクセスにつながる弱点になります。
📌 このページのポイント
- 認証用のパスワードや鍵をコードなどへ固定で埋め込む
- 配布物やソースから秘密が読み取られる可能性がある
- 難読化しても秘密の管理を置き換えられない
- 漏えい時は削除だけでなく無効化・再発行も検討する
ペンギン先生、アプリがAPIを使うなら鍵を中に入れるんじゃないの?
秘密にすべき認証用の鍵を配布アプリへ入れると、取り出される可能性があるよ。利用者の手元に渡るプログラムを、秘密を隠す金庫とは考えないことが大切なんだ。
ハードコーディングと同じこと?
文字を読みにくく加工すれば大丈夫?
難読化だけでは、配布物から秘密が取り出される問題を解決できないよ。どこで認証するか、利用者ごとにどんな権限を渡すかを設計し、秘密は適切な管理基盤で扱う必要があるんだ。
埋め込んでしまった鍵は、次の版から消せばいい?
古い版やソースから既に知られた可能性があるよ。削除に加えて鍵の無効化や再発行、利用履歴の確認を行う。公開してよい識別子まで秘密鍵と決めつけず、その値の役割と権限も確かめよう。
もっと詳しく知りたい人へ
環境変数に移せば解決する?
サーバーのコードから秘密を分離する手段にはなりますが、配布アプリへビルド時に埋め込めば再び配布物へ入ります。環境変数自体の閲覧権限やログへの出力にも注意が必要です。秘密の保管場所と、実際に動くコードへの渡し方を一緒に設計します。
📖 おまけ:英語の意味
「Hard-coded Credentials」 = 固定で埋め込まれた認証情報
💬 Hard-codedはコードに固定して書くこと、Credentialsは認証情報だよ。固定の表示名ではなく、秘密にすべき鍵やパスワードを埋め込む問題なんだ。