Webセキュリティ入門:HTTP・Cookie・脆弱性
JavaScriptからAPIを探す
この回でやること
フロントエンドのコードは全部公開されています。そこから何が読めるかを見ます。
- 読む 約 5 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
フロントエンドの JavaScript は、動かすために利用者の手元へ丸ごと配られています。配ったものから何が読み取れるのかを、探す側の目で確かめます。
読み終えるころには、フロントに置いてはいけないものを判断できます。
配ったものは全部読める
ブラウザで動く JavaScript は、利用者に配られています。読み取り不能にする方法はありません。
読みにくくする加工(圧縮や難読化)はできますが、読めなくすることはできません。 動かすためには、最終的に元の意味に戻る必要があるからです。
何が読み取れるか
配信されたコードから、次のようなものが出てきます。
- 呼んでいるAPIのパス。文字列としてそのまま入っている
- 送っているボディの形。項目名が分かる
- 画面には出していない機能。条件分岐の中に残っている
- 外部サービスの識別子や設定値
「管理者にだけ出す画面」の分岐も、コードには入っています。画面に出ないことと、コードに無いことは別です。
フロントに秘密は置けない
APIの鍵、外部サービスの秘密鍵、内部だけで使う合言葉。どれも配信物に入れた時点で公開です。必要ならサーバー側を経由させます。
何を確かめるか
自分のサービスで確かめる観点です。
- 秘密の値が混ざっていないか
- 内部向けのAPIのパスが露出していないか
- 露出していたとして、そのAPIはサーバー側で認可を確かめているか
3つ目が本題です。パスが分かること自体は、致命的ではありません。分かった相手が叩いたときに通ってしまうことが問題です。
隠すのではなく確かめる
パスを推測しにくくしても、配信物から読めます。難読化を強めても、動く以上は読み解けます。
やることは、隠すことではなくサーバー側で確かめることです。誰であるかをセッションから引き、してよいかを毎回判断します。前の回で学んだ認可の話が、ここに戻ってきます。