XSSとCSRFの違いと対策:スクリプト実行と不正リクエストを見分ける

クロスサイトスクリプティングとCSRFの仕組みの違いを整理し、エスケープ処理とトークンによる対策を解説する。

編集・検証: 情報セキュリティマネジメントスタディ編集部 公式情報: IPA 情報セキュリティマネジメント試験公式ページ 制作・検証方針

今回はWebでよく狙われるXSSとCSRFを学ぶわ。似ているようで攻撃の狙いも対策も違うので、区別が大切よ。

紺野 アキ(あせる) 紺野 アキ

XSSとCSRF…アルファベットが多くて混乱しちゃう!

銀城 ナディア 先生(笑顔) 銀城 ナディア 先生

まずクロスサイトスクリプティング(XSS)ね。
攻撃者がWebページに不正なスクリプトを仕込み、それを見た利用者のブラウザで実行させる攻撃よ。

灰原 さや(普段) 灰原 さや

掲示板の投稿など、利用者の入力がそのままページに表示される箇所が狙われますね。

銀城 ナディア 先生(普段) 銀城 ナディア 先生

そう。
実行されると、利用者のクッキーに入ったセッションIDを盗まれて、なりすましに使われることがあるの。

薔薇崎 ねむ(普段) 薔薇崎 ねむ

偽の入力フォームを表示されちゃうこともあるって聞きましたぁ。

銀城 ナディア 先生(普段) 銀城 ナディア 先生

ええ、フィッシングのように偽画面を出される被害もあるわ。
対策の基本は、出力時に < > などを無害化することよ。

灰原 さや(普段) 灰原 さや

表示する際にエスケープ処理(サニタイジング)を行い、入力をスクリプトとして解釈させないのですね。

銀城 ナディア 先生(笑顔) 銀城 ナディア 先生

補助としてコンテンツセキュリティポリシー(CSP)で実行できるスクリプトを制限したり、クッキーにHttpOnly属性を付けてスクリプトから読めなくする方法もあるわ。

紺野 アキ(普段) 紺野 アキ

じゃあCSRFは何が違うの?

銀城 ナディア 先生(普段) 銀城 ナディア 先生

クロスサイトリクエストフォージェリ(CSRF)は、ログイン中の利用者に、本人の意図しないリクエストを勝手に送らせる攻撃よ。

灰原 さや(普段) 灰原 さや

罠サイトを踏むと、利用者が気づかないうちに、ログイン済みのサイトへ送金や設定変更などの操作が送られてしまうのですね。

銀城 ナディア 先生(笑顔) 銀城 ナディア 先生

そのとおり。
対策は、正規の画面から送られたリクエストか確認できるよう、推測困難なトークンを埋め込んで照合することよ。

薔薇崎 ねむ(普段) 薔薇崎 ねむ

XSSは『script実行』、CSRFは『勝手にリクエスト送信』…狙いが違うんですねぇ。

銀城 ナディア 先生(笑顔) 銀城 ナディア 先生

いい整理ね。
XSSはスクリプトを実行させる攻撃、CSRFは正規利用者に不正な操作を実行させる攻撃。
ここを取り違えないことが得点のカギよ。

紺野 アキ(笑い) 紺野 アキ

対策も、XSSはエスケープ、CSRFはトークンって覚えればいいんだね!

確認クイズ

ログイン中の利用者を罠サイトに誘導し、本人が意図しない操作を、ログイン済みのWebサイトに対して勝手に実行させる攻撃はどれか。

  1. クロスサイトスクリプティング(XSS)
  2. クロスサイトリクエストフォージェリ(CSRF)
  3. SQLインジェクション
  4. 総当り攻撃
こたえを見る

正解: 2. クロスサイトリクエストフォージェリ(CSRF)

正解はCSRF。認証済みの利用者に、本人が意図しないリクエストを送信させて操作を実行させる攻撃で、対策は推測困難なトークンの埋め込みと照合。XSSは不正なスクリプトを利用者のブラウザで実行させる攻撃で狙いが異なる。SQLインジェクションはDBへの不正なSQL注入、総当り攻撃はパスワードを片端から試す攻撃であり、いずれも該当しない。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。