Webセキュリティ入門:HTTP・Cookie・脆弱性
信頼境界(Trust Boundary)とは
この回でやること
信頼境界(Trust Boundary)とは、どこまでを信じてよいかの境目です。境目で検証するという原則を学びます。
- 読む 約 7 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
信頼境界(Trust Boundary)は、どこまでを信じてよいかを決める線です。この回では、Webサービスのどこにその線が走っていて、線の上で何をするのかを見ます。
読み終えるころには、届いた値のどれを信じてよく、どこで確かめるべきかを説明できるようになります。
信頼境界とは信じ方が変わる線
Trust Boundary は、信頼の度合いが変わる場所に引く線です。
線の外から来たものは信じません。線の内側で確認したものは、その範囲で信じます。大事なのは線の位置そのものではなく、線をまたぐところで必ず確かめるという決まりのほうです。
典型的な境界
Webサービスでは、次のようなところに線が引かれます。
- ブラウザとサーバーのあいだ。 もっとも重要な線
- サーバーと外部サービスのあいだ。 決済、地図、認証の連携先
- アプリケーションとデータベースのあいだ
- 利用者の権限のあいだ。 一般利用者と管理者、あるいは利用者どうし
ブラウザ側は境界の外にある
いちばん誤解されやすい点を先に書きます。ブラウザで動いているものは、すべて利用者の手の中にあります。
画面に出ていない隠しフィールドも、無効にしたボタンも、JavaScript で行った入力チェックも、利用者が自由に書き換えられます。開発者ツールを開けば見えますし、通信を作り直して送ることもできます。
つまり、ブラウザから届いた値はすべて「外から来たもの」です。自分のサービスの画面が送ってきた値であっても、例外にはなりません。
入力欄の長さ制限も、選択肢を絞ったプルダウンも、使いやすくするためのものです。同じ確認をサーバーでも行っていなければ、制限は無いのと同じです。
何を確かめるのか
線をまたぐところで確かめることは、大きく3つあります。
形。 想定した型と範囲に収まっているか。数量が整数か、負でないか、上限を超えていないか。
権限。 その操作を、その人が行ってよいか。ログインしているかだけでなく、対象がその人のものかまで見ます。
決定権。 その値を誰が決めるべきか。価格、権限、他人の識別子。これらは利用者が決めてよい値ではありません。届いていても使わない、という判断になります。
3つ目が抜けやすい部分です。形も権限も確かめたのに、本来サーバーが持つべき値をリクエストから取ってきてしまうという誤りは、実際によく起きます。
内側なら安全とは限らない
線の内側だからといって、無条件に信じてよいわけではありません。
外部サービスからの応答、データベースに入っている過去のデータ、社内の別システムからの通信。これらも「どこかで誰かが入れた値」です。この章の終わりで扱う多層防御の考え方では、内側でも重要な判断の前にもう一度確かめます。