レッスン 2-4
認可の設計
認証は
読み終えたらすべての
この頁の流れ
URL の
出典を確かめた日 2026年10月24日
なぜ通るのか
通販の/orders/1 です。
ログインは
認証と認可は別の問い
認証は
ログインの
番号は利用者の手の中にある
URL の
連番は
見る時だけ確かめる、が穴になる
よく
脆いコードと直したコード
ラボの
番号だけで取り出すか、持ち主と突き合わせるか
def get_order(db, user, order_id):sql = ("SELECT id, owner, item"" FROM orders WHERE id = ?")return db.execute(sql, (order_id,)).fetchone()def get_order(db, user, order_id):sql = ("SELECT id, owner, item"" FROM orders WHERE id = ?"" AND owner = ?")return db.execute(sql, (order_id, user)).fetchone()脆い方は user を
操作ごとに書くか、1 か所の関所を通すか
def cancel(db, user, order_id):db.execute("UPDATE orders SET st = 'cancel'"" WHERE id = ?", (order_id,))class NotFound(Exception):pass def owned(db, user, order_id):row = db.execute("SELECT owner FROM orders"" WHERE id = ?",(order_id,)).fetchone()if row is None or row[0] != user:raise NotFound(order_id) def cancel(db, user, order_id):owned(db, user, order_id)db.execute("UPDATE orders SET st = 'cancel'"" WHERE id = ?", (order_id,))直した方は、owned の
ログでの見え方と検知
脆い
127.0.0.1 alice GET /orders/1 200 alice127.0.0.1 alice GET /orders/2 200 bob127.0.0.1 alice GET /orders/3 200 carol直した
| 見る物 | な |
|---|---|
| 頼んだ | 成功した |
| 1 人が | 番号を |
| 403 と | CISA などは、 |
ACSC、
直し方と、直ったことの確かめ方
自分の
- 作業用の
フォルダに sqlite3 の データベースを 作り、 alice の 注文 1 と bob の 注文 2 を入れる - 脆い
get_orderにalice と 2 を 渡し、 bob の 注文が 返る ことを 確かめる - 脆い
cancelにalice と 2 を 渡し、 bob の 注文が 取り消される ことを 確かめる - 両方を
直した コードに 置き換え、 同じ 入力で 何も 返らず、 取り消しも 止まる ことを 確かめる - 下の
試験を 足し、 直す前の コードに 戻すと 試験が 落ちる ことも 確かめる - 終わったら、
作業用の フォルダごと消す
def test_alice_cannot_read_bob(db):assert get_order(db, "alice", 2) is Nonerow = get_order(db, "bob", 2)assert row[2] == "緑茶" def test_alice_cannot_cancel_bob(db):with pytest.raises(NotFound):cancel(db, "alice", 2)assert status(db, 2) == "open"試験は、
番号を
関わる事例
この
2023年7月27日、
作り手への
- 2024年5月31日、
暗号資産交換業 DMM Bitcoin ビットコイン不正流出事件 入口 ウォレット管理を 委託していた 株式会社 Gincoの 従業員に、 LinkedIn 上で リクルーターに なりすました TraderTraitorが 採用前試験を 装って 悪意ある Python スクリプトの URLを 送り、 従業員の 端末が 侵害された - 2023年10月17日、
通信 LINE・ インターネットサービス ヤフー 不正 入口 LINEアクセスに よる 情報漏えい ヤフーと 委託先の NAVER Cloud 社が、 それぞれセキュリティ 保守を 委託していた 企業の 従業員PCが マルウェアに 感染し、 攻撃者が その PCを 遠隔操作できる 状態になった - 2023年7月13日、
通信・ NTTコールセンター 業務受託 西日本 入口 システムのグループ 委託先元派遣社員に よる 顧客情報の 不正持ち出し 運用保守業務に 従事していた 元派遣社員が、 顧客データを 保管する PDSサーバに 特権的に アクセスできる 立場を 使い、 閉域網の 本件 ネットワークに 保守端末等から アクセスした - 2022年9月22日、
通信 (携帯電話・ Optus 個人情報流出 入口 社外に固定通信) 公開された ウェブサイトや ドメインが、 社内で 顧客情報を 保持する データベースと 連動する 部分に 弱点が あり、 権限の ない形で 個人情報に アクセスできる 状態に なっていた - 2022年6月22日、
地方自治体 尼崎市 全市民情報USB 入口 住民基本情報をメモリー 紛失事案 扱う 委託業務に、 市の 承諾を 得ない 再委託・ 再々 委託に よって 入り 込んでいた 従業員が、 サーバルームで 給付金サーバの 全市民データを USBメモリーに コピーし 持ち 出した - 2020年7月15日、
ソーシャルメディア Twitter 社内ツール 入口 攻撃者が乗っ 取りに よる 著名 アカウント 不正操作 Twitter 社員に 電話を かけ、 社内IT部門を 装って VPN接続の 不具合を 口実に、 本物 そっくりの 偽ログイン画面へ 認証情報を 入力させる 「ビッシング」で 最初の 侵入口を得た - 2019年7月19日、
銀行 キャピタル・・ クレジットカード ワン 入口 外部の情報漏えい 人物が、 クラウド環境に 置かれた サーバーの 設定の 誤りを 突いて 侵入し、 ウェブアプリケーションファイアウォール 用の アカウントの 認証情報を 手に 入れた。 - 2019年5月24日、
権原保険・ ファースト・エスクローサービス (不動産決済) アメリカン 文書共有 入口 文書のアプリの 認可漏れ 画像を 顧客に 渡すEagleProの リンク機能に 認証が 無く、 URLの 中の 文書IDを 別の 連番に 差し 替えるだけで、 無関係な 別の 取引の 文書画像も 見られた - 2014年6月27日、
通信教育 ベネッセ顧客情報漏えい 入口 業務委託先事件 (株式会社 シンフォーム)の 元社員が、 担当業務で 付与されていた データベースへの アクセス権限を 使い、 顧客情報を クライアントPCに 抽出した
確認クイズ
1 問目
注文の
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。
答え イ
UUID は
2 問目
詳細を
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。
答え ウ
ボタンの
説明課題
次の
- な
ぜ認可は、 ログインの 時ではなく、 すべての 操作で 要るのか。 例を 1 つ挙げて
模範解答を見る
ログインで
一次資料
どれも
- Preventing Web Application Access Control Abuse (CISA、英語)。
2023年7月27日の ACSC、 CISA、 NSA の 共同の 注意喚起 AA23-208A。 IDOR の 説明、 既定で 拒むこと、 すべての 要求での 確かめ、 UUID の 注記、 404 と 403 と 総当たりの関係 - Authorization Cheat Sheet (OWASP、英語)。
認証と 認可の 区別、 既定で 拒否、 要求の たびの 確かめ、 推測されても 触れない ID、 認可の試験 - Insecure Direct Object Reference Prevention Cheat Sheet (OWASP、英語)。
アクセスの たびに 権限を 確かめる こと、 ランダムな ID は 重ねの 守りであること
次へ
次の