今回はWebでよく狙われるXSSとCSRFを学ぶわ。似ているようで攻撃の狙いも対策も違うので、区別が大切よ。
XSSとCSRF…アルファベットが多くて混乱しちゃう!
まずクロスサイトスクリプティング(XSS)ね。
攻撃者がWebページに不正なスクリプトを仕込み、それを見た利用者のブラウザで実行させる攻撃よ。
掲示板の投稿など、利用者の入力がそのままページに表示される箇所が狙われますね。
そう。
実行されると、利用者のクッキーに入ったセッションIDを盗まれて、なりすましに使われることがあるの。
偽の入力フォームを表示されちゃうこともあるって聞きましたぁ。
ええ、フィッシングのように偽画面を出される被害もあるわ。
対策の基本は、出力時に < > などを無害化することよ。
表示する際にエスケープ処理(サニタイジング)を行い、入力をスクリプトとして解釈させないのですね。
補助としてコンテンツセキュリティポリシー(CSP)で実行できるスクリプトを制限したり、クッキーにHttpOnly属性を付けてスクリプトから読めなくする方法もあるわ。
じゃあCSRFは何が違うの?
クロスサイトリクエストフォージェリ(CSRF)は、ログイン中の利用者に、本人の意図しないリクエストを勝手に送らせる攻撃よ。
罠サイトを踏むと、利用者が気づかないうちに、ログイン済みのサイトへ送金や設定変更などの操作が送られてしまうのですね。
そのとおり。
対策は、正規の画面から送られたリクエストか確認できるよう、推測困難なトークンを埋め込んで照合することよ。
XSSは『script実行』、CSRFは『勝手にリクエスト送信』…狙いが違うんですねぇ。
いい整理ね。
XSSはスクリプトを実行させる攻撃、CSRFは正規利用者に不正な操作を実行させる攻撃。
ここを取り違えないことが得点のカギよ。
対策も、XSSはエスケープ、CSRFはトークンって覚えればいいんだね!
確認クイズ
ログイン中の利用者を罠サイトに誘導し、本人が意図しない操作を、ログイン済みのWebサイトに対して勝手に実行させる攻撃はどれか。
- クロスサイトスクリプティング(XSS)
- クロスサイトリクエストフォージェリ(CSRF)
- SQLインジェクション
- 総当り攻撃
こたえを見る
正解: 2. クロスサイトリクエストフォージェリ(CSRF)
正解はCSRF。認証済みの利用者に、本人が意図しないリクエストを送信させて操作を実行させる攻撃で、対策は推測困難なトークンの埋め込みと照合。XSSは不正なスクリプトを利用者のブラウザで実行させる攻撃で狙いが異なる。SQLインジェクションはDBへの不正なSQL注入、総当り攻撃はパスワードを片端から試す攻撃であり、いずれも該当しない。