クロスサイトスクリプティング

クロスサイトスクリプティング (XSS) は、ユーザの入力データを使用して動的にページを出力する Webアプリケーションの脆弱性を利用し、ユーザのブラウザ上で悪意のあるスクリプトを実行させるセキュリティ攻撃です。
多くの場合、攻撃者が用意した Web ページや電子メール中のリンクから脆弱性のある Web サイトに誘導するという段階を踏むため、クロスサイト (サイトをまたがる) スクリプティングと呼ばれます。

ごく簡単なケースとして、ユーザがフォームのテキスト ボックスに文字列を入力して送信すると、その文字列を含む HTMLページを返す Webアプリケーションを例に紹介します。

クロスサイトスクリプティング(XSS)の例

クロスサイトスクリプティング(XSS)の例

ここで、テキスト ボックスに次の文字列を入力して送信したとします。

文字列を入力

アプリケーションで入力データをチェックしていない場合、出力された Web ページにスクリプトがそのまま含まれるため、次のようなダイアログが表示されます。

ダイアログ表示

この例では、スクリプトは単にメッセージボックスを表示するだけですが、攻撃者は悪意のあるスクリプトを使用して、Cookie 情報の詐取、偽のページの表示、第三者へのフォーム情報の送信など、さまざまな操作を行うことができます。

ユーザに悪意のあるスクリプトを実行させるため、攻撃者はパラメータに細工を施した URL リンクを含む HTML ページや電子メールをユーザに閲覧させ、リンクをクリックするように仕向けます。
次のリンクをクリックすると、フォームのテキスト ボックスにスクリプトを入力して送信ボタンをクリックした場合と同じリクエストがアプリケーションに送信されます。

スクリプト

スクリプトとしては、一般的に JavaScript が多く使用されますが、ユーザのブラウザでサポートされているスクリプト言語であれば、言語を問いません。

対策

XSS を防ぐには、ユーザからの入力データの検証と、出力データの適切なエンコーディングを徹底します。 入力データを表示する前に、必ずデータの長さ、型、構文などが許可される範囲内であるかどうかを検証します。 また、出力データは HTML、XML などの出力フォーマットに従って適切にエンコードします。

Jtestのルール

XSS の脆弱性の可能性

このルールは、悪意のあるスクリプトを含んでいる可能性のある入力データが、検証メソッドによるチェックを受けないまま出力メソッドに渡されている場合に違反をレポートします。このルールはフロー解析ルールなので、入力データの取得と出力が別のメソッドに分かれていたり、複数の実行パスが存在する場合でも、実行パスを辿って違反を検出することができます。

  • チェックできる入力データ
    • リモート メソッドおよびエントリ ポイント メソッドのパラメータ
    • ネイティブ メソッド
    • 検証を行っていない Struts フォーム
    • ネットワーク
    • Servlet リクエスト
    • ファイル
    • パイプ
    • リモート メソッド
    • リフレクション メソッド
    • 環境変数およびシステム プロパティ
    • データベース
    • ストリーム指向 API (ストリーム、リーダー、チャネル)
    • コンソール
    • GUI コントロール
  • チェックできる出力メソッド
    • javax.servlet.ServletOutputStream
      • void print(...) methods
      • void println(...) methods
      • void write(...) methods
    • java.io.PrintWriter
      • void print(...) methods
      • void println(...) methods
      • void write(...) methods
  • 検証メソッドの指定も可能
    ルールのパラメータでは検証メソッドを指定することも可能です。検証メソッドは、スクリプトを含んでいる可能性のある入力データを受け取り、チェック済みの安全なデータをパラメータまたは戻り値として返すメソッドです。検証メソッドをパラメータで指定しておくと、チェック済みのデータに対して誤って違反が検出されることがなくなるため、解析結果の精度が向上します。
※ セキュリティルール及びセキュリティコンプライアンス規約セットによる静的解析には「セキュリティコンプライアンスパック」のライセンス(有償)が必要です。

Java対応静的解析・単体テストツール Jtestに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
parasoft-info@techmatrix.co.jp

CONTACT

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。