パスワードをコードに書くと何が起きるか
秘密情報とは、パスワードやAPIキーのように、知られてはいけない文字列です。コードの中に書いたまま公開すると、誰かに見つかって悪用されます。
この回では、秘密情報が置かれがちな場所と、見つけ方、安全な置き場所を学びます。
ラボのルール
注意
ラボのアプリは、あなた専用のコピーで、中の秘密はすべてダミーです。調べてよいのは、このコピーだけです。他人のコードの秘密を探すのは禁止です。本物を見つけたら使わずに、持ち主に知らせます。
このレッスンのゴール
メモ
コードに残された秘密情報を見つけて、安全な置き場所に移すことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 秘密情報 | 知られてはいけない文字列。パスワード、鍵など | APIキー |
| APIキー | 別のサービスの機能を使うための、利用者を表す文字列 | |
| 環境変数 | プログラムの外から渡す設定の値。コードには書かない | |
| 履歴 | Git が残している、過去の変更の記録 | |
| 失効 | 漏れた秘密を、もう使えないようにすること | |
| 設定ファイル | アプリの動き方や接続先を書いたファイル |
学生が入力するセルは、このプレビューでは空白です。
秘密情報は、どこに残りがちなのか
一番多いのは、コードに直接書いた場合です。ほかにも、設定ファイル、Git の履歴、ログ、Webページのソースにも残ります。
開発中に「あとで消そう」と書いた1行が、そのまま公開されることがよくあります。
置き場所と、起きること
| 置き場所 | 起きること |
|---|---|
| コードの中 | 公開すると、誰でも読める |
| 設定ファイル | コピーされるたびに、広がる |
| Git の履歴 | 消したあとも、昔の版に残る |
| ログ | 見られる人全員に、見えてしまう |
| Webページのソース | ブラウザで誰でも見られる |
学生が入力するセルは、このプレビューでは空白です。
ダミーの設定ファイルを作る
printf 'user = "ana"\npassword = "abc123x"\n' > demo.confここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
秘密の行を探す
grep -n password demo.confここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
秘密は、どこに置けばよいのか
秘密はコードの外に置き、実行するときに渡します。いちばん簡単なのは環境変数です。
もっと大きな仕事では、秘密を預かる専用のしくみを使います。どちらでも、秘密をGitに入れないことは同じです。
環境変数でコードの外から渡す
APP_KEY=x1y2z3 sh -c 'echo $APP_KEY'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ログでは、秘密を伏せる
# ログに秘密を出すときは、先頭の2文字だけ残して伏せます。
token = "x1y2z3w4"
print(token[:2] + "******")
よくある間違い
注意
コードから秘密を消せば安全になる、と考える人がよくいます。Git の履歴や、すでに公開された版には残っています。漏れた秘密は、消すのではなく、先に失効させます。
ラボのアプリが動いているか聞く
curl -s http://wrongsecrets:8080/actuator/healthここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
WrongSecrets のラボの進め方
ブラウザの Open を押すと、WrongSecrets が開きます。チャレンジ0から始めます。
見つけた秘密について、どこにあったか、なぜその場所がよくないか、本来はどこに置くべきかを書いて提出します。