Webアプリケーション攻撃 - SQLi・XSS・CSRF

SQLインジェクション・XSS・CSRFを中心に、主要なWeb脆弱性を攻撃と対策のペアで整理。狙う先の違いや紛らわしい類似攻撃も対比で解説。

編集・検証: ITパスポートスタディ編集部 公式情報: IPA ITパスポート試験公式ページ 制作・検証方針

SQLインジェクション・XSS・CSRFは「Web三大攻撃」とも呼ばれる試験頻出テーマです。攻撃の仕組みと対策をセットで、身近なたとえで整理していきましょう。

星見 めい(普段) 星見 めい

Webサイトがハッキングされたってニュース、よく見るじゃん。
あれって具体的にどうやって攻撃してんの? なんかイメージわかないんだよね。

紫垣 こはる 先生(笑顔) 紫垣 こはる 先生

いい疑問ね。
実はWebアプリへの攻撃は、まず3つ押さえれば大半をカバーできるのよ。
SQLインジェクション・XSS・CSRF。
試験では「Web三大攻撃」のつもりで覚えておくといいわ。

小夜川 ほのか(あせる) 小夜川 ほのか

えすきゅーえる…? いきなり呪文みたいですぅ。

蜂谷 まこと(普段) 蜂谷 まこと

大丈夫です。
一つずつ見れば怖くないですよ。
まずはSQLインジェクションから。
SQLというのはデータベースに命令を出す言葉のことです。

蜂谷 まこと(普段) 蜂谷 まこと

たとえばログイン画面で、ユーザー名の欄に ' OR '1'='1 という文字を入れると、命令が「パスワードが何であっても必ず正しい」という意味に書き換わってしまうことがあるんです。

星見 めい(びっくり) 星見 めい

マジか。
鍵かかってるのに『常に開いてる扉』に変えられちゃう感じじゃん。

紫垣 こはる 先生(笑顔) 紫垣 こはる 先生

ふふ、まさにそう。
だから対策は『入力欄に書かれた文字を、命令の一部として混ぜない』こと。
それを実現するのが基本対策ね。

蜂谷 まこと(普段) 蜂谷 まこと

具体的にはプレースホルダを使います。
SQL文の枠と入力値をきっちり分けるので、何を入れても命令には化けません。

小夜川 ほのか(笑顔) 小夜川 ほのか

枠と中身を分ける…お弁当箱の仕切りみたいなものですかぁ?

紫垣 こはる 先生(笑顔) 紫垣 こはる 先生

うまいたとえね、ほのかちゃん。
ご飯とおかずが混ざらない、あの仕切りよ。
補助的に怪しい文字を弾く入力値チェックもあるけれど、本命はプレースホルダ。
ここは試験でよく狙われるわ。

蜂谷 まこと(普段) 蜂谷 まこと

次がXSSです。
掲示板などに <script>…</script> という命令を書き込み、それを見た人のブラウザで勝手に動かす攻撃ですね。

星見 めい(普段) 星見 めい

ん? さっきのSQLと何が違うの? どっちも変な文字入れてるじゃん。

蜂谷 まこと(普段) 蜂谷 まこと

いい着眼点です。
対比するとわかりやすいですよ。
SQLインジェクションは狙う先がデータベース。
XSSは狙う先が他の利用者のブラウザ。
サーバ側かユーザー側か、で覚えると混同しません。

小夜川 ほのか(しょんぼり) 小夜川 ほのか

ふぇぇ…見ただけのわたしが被害者になっちゃうんですねぇ。
それで何をされちゃうんですかぁ?

紫垣 こはる 先生(普段) 紫垣 こはる 先生

被害者のセッション情報を盗まれて、本人になりすまされたり、偽サイトに誘導されたりするの。
対策はページに文字を出すときのエスケープ処理。
あわせてHttpOnly属性を付けると、盗まれにくくなるわ。

蜂谷 まこと(普段) 蜂谷 まこと

3つ目がCSRF、読み方は『シーサーフ』です。

紫垣 こはる 先生(普段) 紫垣 こはる 先生

たとえば、あなたが銀行サイトにログインしたまま別の罠サイトを開いたとするでしょう。
その瞬間、罠が裏で『送金しろ』というリクエストを銀行へ送る。
ブラウザはログイン中だから本人の操作だと信じて実行してしまうの。

星見 めい(びっくり) 星見 めい

うわ、自分は何も押してないのに勝手に送金…こわすぎじゃん。
どう防ぐの?

紫垣 こはる 先生(笑顔) 紫垣 こはる 先生

対策はCSRFトークン。
正規の操作にだけ毎回ちがう合言葉を付けておけば、合言葉を知らない罠サイトのリクエストは弾けるのよ。

蜂谷 まこと(普段) 蜂谷 まこと

補足すると、XSSとCSRFは名前が似ていて紛らわしいです。
XSSは『スクリプトを実行させる』攻撃、CSRFは『なりすまして操作を送らせる』攻撃。
対策もXSSはエスケープ、CSRFはトークン、と対で覚えると安全です。

小夜川 ほのか(普段) 小夜川 ほのか

三大攻撃、なんとか追いつけましたぁ。
他にも覚えることってあるんですかぁ?

蜂谷 まこと(普段) 蜂谷 まこと

はい。
ディレクトリトラバーサルやOSコマンドインジェクション、クリックジャッキングも試験範囲です。

紫垣 こはる 先生(普段) 紫垣 こはる 先生

全部を個別に防ぐのは大変だから、入口にWAFを置いて怪しい通信をまとめて止める手もあるわ。
世界標準の脆弱性まとめOWASP Top 10も名前だけ知っておくと安心よ。

星見 めい(笑い) 星見 めい

なるほどね。
攻撃の名前と対策をペアで覚えるのがコツってことか。
だいぶスッキリしたじゃん!

紫垣 こはる 先生(笑顔) 紫垣 こはる 先生

ふふ、その通り。
最後に整理すると、SQLi=DB×プレースホルダ、XSS=ブラウザ×エスケープ、CSRF=なりすまし×トークン。
この『攻撃と対策のペア』が頭に入れば、もう試験は怖くないわよ。

確認クイズ

ログイン中の利用者になりすまし、本人が意図しない操作(送金など)のリクエストを送信させる攻撃はどれか。

  1. XSS
  2. SQLインジェクション
  3. CSRF
  4. ディレクトリトラバーサル
こたえを見る

正解: 3. CSRF

正解はCSRF(クロスサイトリクエストフォージェリ)です。ログイン状態を悪用して意図しない操作を送らせる攻撃で、対策は使い捨ての合言葉であるCSRFトークンです。XSSはブラウザでスクリプトを実行させる攻撃、SQLインジェクションはDBを不正操作する攻撃、ディレクトリトラバーサルは公開範囲外のファイルを読み出す攻撃で、いずれも本問の説明とは異なります。

🔖 この記事の関連書籍

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