tammpro | 少しためになるブログ

プログラミングの学習方法や学習する上で大切な考え方など、僕が初心者の時に知っておきたかったことなどを中心に発信しています。

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

tammpro

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


XSSの仕組み

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

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


具体的な被害例

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

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

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

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

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


XSSの種類

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

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

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

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


防止策

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

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

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

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

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

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


まとめ

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


セキュリティは後から追加するのではなく、設計段階から意識して組み込むことが重要です。