クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

コードに入れた秘密情報の見つけ方

このレッスンのあとで: コードに残された秘密情報を見つけて、安全な置き場所に移すことができる。

45分のレッスンコマンド4件WrongSecrets のラボ:埋め込まれた秘密情報を見つけ、保管の正しい場所を学ぶ

パスワードをコードに書くと何が起きるか

秘密情報とは、パスワードや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'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ログでは、秘密を伏せる

コード: python
# ログに秘密を出すときは、先頭の2文字だけ残して伏せます。
token = "x1y2z3w4"
print(token[:2] + "******")

よくある間違い

注意

コードから秘密を消せば安全になる、と考える人がよくいます。Git の履歴や、すでに公開された版には残っています。漏れた秘密は、消すのではなく、先に失効させます。

ラボのアプリが動いているか聞く

コマンド
curl -s http://wrongsecrets:8080/actuator/health

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

WrongSecrets のラボの進め方

ブラウザの Open を押すと、WrongSecrets が開きます。チャレンジ0から始めます。

見つけた秘密について、どこにあったか、なぜその場所がよくないか、本来はどこに置くべきかを書いて提出します。

このラボとソースについて: WrongSecrets のラボ:埋め込まれた秘密情報を見つけ、保管の正しい場所を学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。