会員登録すると
学習することができます。
会員登録する(無料)
登録済みの方はこちら
ログイン

認可漏れ ― AIは「誰のデータか」を知らない

目安学習時間 15分

課題

全問正解でレクチャー完了です。

【問題1】

AIが認可の条件を書き漏らしやすい理由として、最も適切なものはどれですか。

[選択肢]

【問題2】

ログイン必須のページで「Order.find(params[:id])」と書かれていたとき、起こりうる問題はどれですか。

[選択肢]
会員登録すると
学習することができます。
会員登録する(無料)

学ぶ目的

一番見落とされやすい穴

ログインしているかどうか(認証)は、AIもたいてい書いてくれます。見落とされやすいのは、そのデータをこの人が見てよいか(認可)です。

よくある形

注文の詳細ページを作らせると、AIはこう書くことがあります。

def show
  @order = Order.find(params[:id])
end

ログインは必須にしてあっても、URLの /orders/101 を /orders/102 に変えれば他人の注文が見えます。IDを書き換えるだけなので、特別な道具も知識も要りません。

直し方

「自分の注文の中から探す」形にします。

def show
  @order = current_user.orders.find(params[:id])
end

他人の注文IDを指定すると、見つからない(404)扱いになります。

なぜAIは間違えるのか

「注文は持ち主にしか見せない」というのは、コードではなく仕様です。AIは仕様を教えられなければ知りようがありません。管理者は全部見てよい、同じ会社の人なら見てよい、といった規則も同じです。

確かめ方

  • find(params[:id]) のように、IDだけでデータを取っている箇所を探す
  • 「このデータは誰のものか」を、1つずつ自分で言えるか確かめる
  • 言えないなら、それはAIではなく仕様の側の穴

AIに頼むときは、「ログイン中のユーザーが持つ注文だけを対象にして」と、持ち主の条件を書きます。

このレクチャーで学ぶこと

  • 認証と認可の違い
  • IDを書き換えるだけで他人のデータが見える形
  • 持ち主の条件を仕様として伝える

質問

まだ質問は投稿されていません。

質問投稿

ログイン後に質問の投稿ができます。