クロスサイトスクリプティングの仕組み
Webページには、文字や画像のほかに、動きをつけるための「スクリプト」(主にJavaScript)が含まれています。クロスサイトスクリプティング(XSS)は、コメント欄・問い合わせフォーム・検索欄などから攻撃者がスクリプトを送り込み、それがページの一部としてそのまま表示されてしまう脆弱性を突く攻撃です。
誰でも書き込める掲示板に、読んだ人の手を勝手に動かしてしまう「仕掛け付きの貼り紙」を貼られるようなものです。掲示板(サイト)自体は壊れていなくても、それを読んだ人(訪問者や管理者)が被害を受けます。同じく入力欄を悪用するSQLインジェクションがデータベースを狙うのに対し、XSSはページを見る人のブラウザを狙います。
主な種類は次の2つです。
- 格納型:コメントや投稿、設定などに保存され、そのページを開くたびに実行される
- 反射型:細工したURLを開かせて、その人の画面でだけ実行させる
WordPressサイトでの例
WordPressで特に危険なのは、ログイン中の管理者のブラウザでスクリプトが実行されるケースです。管理者はサイトのほぼすべてを操作できるため、スクリプトはその権限を借りて、次のような操作を気づかれずに行うことがあります。
XSSの脆弱性は、フォーム・ギャラリー・SNS連携など、入力欄や設定画面を持つプラグインで見つかることがあります。
見つけ方・確認方法
- 使っているプラグイン・テーマに、XSSの脆弱性が公表されていないか確認する
- 管理画面や投稿を開いたときに、見覚えのないポップアップや別サイトへの転送が起きないか確認する
- 投稿・コメント・ウィジェットの中に、
<script>で始まるコードや見覚えのない外部URLが紛れていないか確認する - ユーザー > ユーザー一覧 に、作成した覚えのない管理者がいないか確認する
対策
- WordPress本体・テーマ・プラグインを最新の状態に保ち、使っていないものは削除する
- WAF(Webアプリケーションファイアウォール)で、スクリプトを含む不審な送信を遮断する
- 管理者の権限は必要な人だけに絞り、記事の更新だけをする人には「編集者」など権限の低いアカウントを使ってもらう
- メールやコメントに書かれた見覚えのないリンクを、管理画面にログインしたまま開かない



