【入門編】XSSによるフィッシングと認証情報窃取の攻撃シーケンス – アプリケーションセキュリティ & 安全な開発防御ガイド

その「ログイン画面」、本当に本物ですか?——XSSで仕掛けられる「見えない泥棒」の正体

こんにちは。セキュリティの世界へようこそ。
今日は、多くのエンジニアが「一度は聞いたことがあるけれど、実際どう動いているのかピンとこない」というXSS(クロスサイトスクリプティング)について、少し怖いけれど大切な話をします。

特に今回は、「あなたの作ったサイトの中に、泥棒が偽の入り口を作ってしまう」という攻撃に焦点を当てます。教科書を閉じて、まずは身近な「家の防犯」に例えて考えてみましょう。

—

1. XSSによる「偽の玄関」攻撃とは?

想像してみてください。あなたは自分の家(Webサイト)の玄関に、信頼できる鍵をかけています。しかし、ある日泥棒が、玄関の横の壁に「そっくりな偽の扉」を貼り付けたとします。

遊びに来た友人がその偽扉を見て、「お、ここから入れるんだな」と勘違いして、大切な鍵(パスワード)を入力してしまったら……? 泥棒は、その鍵をそのまま盗んで家の中へ入ってしまいますよね。

これが、XSSを使ったフィッシング攻撃の正体です。

攻撃のシーケンス(流れ)

1. 侵入: 攻撃者が、あなたのサイトの掲示板や検索結果など、「ユーザーが入力した文字を表示する場所」に悪意あるスクリプトを仕込みます(格納型XSS)。
2. 変装: ページを開いたユーザーの画面上に、「セッションが切れました。再ログインしてください」という、本物そっくりの偽ログインフォームをJavaScriptで描画します。
3. 窃取: ユーザーが何も疑わずにIDとパスワードを入力すると、その情報は攻撃者のサーバーへこっそりと送信されてしまいます。

ユーザーからすれば、URLバーには確かにあなたのサイトのアドレスが表示されているため、疑う余地がありません。これが「信頼を悪用する」というXSSの恐ろしさです。

—

2. なぜこんなことが起こるのか?

原因はシンプルで、「表示する文字を、プログラム(HTML)の一部として解釈させてしまっているから」です。

例えば、検索窓に と入力して送信したとき、サイト側がそのまま画面に書き出してしまうと、ブラウザは「おっ、これは実行すべきプログラムだな!」と勘違いして動かしてしまいます。

これを防ぐための基本は、「入力された文字を、単なる『ただの文字(文字列)』として扱い、プログラムとしては動かさない」というルールを徹底することです。

—

3. 実践!「泥棒を締め出す」ための防御策

まずは、コードを書くときに絶対に守るべき2つの鉄則を覚えましょう。

① 「エスケープ処理」という名のラベル貼り

HTMLに値を表示する際は、必ず特殊記号を「無害化」します。これを「エスケープ」と呼びます。

  • < → <
  • > → >
  • & → &

これをしておけば、ブラウザは

securityintronationalをフォローする

コメント

タイトルとURLをコピーしました