Webセキュリティの基礎 / 約20分
認証(Authentication)と認可(Authorization)を区別する
なぜこれを学ぶか
セキュリティ事故の多くは「ログインはできているのに権限チェックが抜けている」ケースです。この2つを明確に区別できるかが出発点になります。
認証(Authentication) は「あなたは誰か」を確認する処理です。ログインフォームでメールアドレスとパスワードを照合するのが典型例です。
認可(Authorization) は「あなたはこれをしてよいか」を判定する処理です。ログイン済みであることと、特定の操作が許可されていることは別問題です。
セッション管理 では、ログイン状態をCookieで維持するのが一般的です。CookieにはブラウザのJSからアクセスできないようにするhttpOnly属性、HTTPS通信でのみ送信するsecure属性を必ず付けます。
JWT(JSON Web Token) はサーバー側にセッション状態を持たない認証方式です。便利ですが、発行したトークンを個別に無効化しにくい(失効の難しさ)という弱点があります。
典型的な事故パターンは「認証だけ確認して認可を忘れる」ことです。ログイン済みかどうかは見ているが、「そのユーザーがこの操作をしてよいか」を見ていないコードは、他人のデータを操作できてしまいます。
重要ポイント
- 認証=本人確認、認可=権限確認は別物
- セッションCookieにはhttpOnly/secure属性を付ける
- JWTは便利だが失効管理が難しい
理解度チェック
選ぶと即座に解説が表示されます。
ログイン済みユーザーがURLの投稿IDを書き換えて他人の投稿を削除できてしまった。何が抜けていたか?
ヒントを見る
「ログインしているか」の確認と「その投稿を削除してよいか」の確認は別のチェックです。今回どちらは通っていて、どちらが抜けていたでしょうか。
スキルセルフチェック
このレッスンの内容をどの程度理解できましたか?