XSS(クロスサイトスクリプティング)とは?

XSS(クロスサイトスクリプティング)とは?

記事
IT・テクノロジー
Webアプリケーションのセキュリティを考える上で、よく登場する脆弱性のひとつが XSS(クロスサイトスクリプティング) です。
XSSは、ユーザーが入力した悪意のあるスクリプトがそのままWebページ上で実行されてしまう脆弱性のことを指します。攻撃者はこの仕組みを利用して、ユーザーに気づかれないまま情報を盗み出したり、不正な操作をさせたりします。

XSSの仕組み

通常、Webサイトはユーザーが入力した情報を表示することがあります。例えば、掲示板のコメント欄やお問い合わせフォームの内容です。
このとき、入力内容をそのまま表示すると、もしユーザーが「悪意のあるJavaScriptコード」を入力していた場合、ページを見た人のブラウザ上でそのコードが動いてしまいます。

つまり、攻撃者が仕込んだスクリプトが、無関係なユーザーに実行されるのがXSSの本質です。

具体的な被害例

偽のログインフォームを表示させ、入力されたID・パスワードを盗み取る

Cookie情報を抜き取り、セッションを乗っ取る

ユーザーを不正なサイトにリダイレクトする

ページの見た目を改ざんして混乱を与える

このように、XSSは「ユーザーをだまして操作させる」タイプの攻撃に直結します。

XSSの種類

XSSには大きく分けて3つの種類があります。

反射型XSS(Reflected XSS)
悪意のあるスクリプトがURLパラメータなどを通じて実行されるもの。フィッシングメールや偽のリンクから誘導されるケースが多いです。

格納型XSS(Stored XSS)
掲示板やプロフィール欄などに入力したスクリプトがサーバーに保存され、他のユーザーがページを閲覧した際に実行されるもの。影響範囲が広く危険性が高いです。

DOMベースXSS(DOM-based XSS)
サーバーを介さず、ブラウザ内のJavaScriptによるDOM操作の過程でスクリプトが実行されるもの。近年のシングルページアプリケーションで問題になりやすいタイプです。

防止策

XSSを防ぐためには、以下のような対策が基本です。

ユーザーからの入力値を必ず検証し、不正なコードを除去する(入力値のバリデーション)

出力する際にHTMLエスケープを行い、スクリプトが実行されないようにする

Cookieに HttpOnly 属性を付与し、JavaScriptから取得できないようにする

フレームワークやライブラリが提供するセキュリティ機能を利用する

開発者側が「入力値は信用しない」という意識を持つことが、最も大切なポイントです。

まとめ

XSS(クロスサイトスクリプティング)は、Webアプリケーションにおいて非常に一般的かつ危険な脆弱性のひとつです。
小さなコメント欄やフォームであっても、対策を怠れば大きな被害につながる可能性があります。

セキュリティは後から追加するのではなく、設計段階から意識して組み込むことが重要です。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す