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

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

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

Jtestでセキュアなアプリケーション開発 失敗しない虚弱性対策とは?

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

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

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

文字列を入力

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

ダイアログ表示

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

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

スクリプト

このアプリケーションではユーザーがログイン画面に入力したユーザー名を画面に出力します。
スクリプトとしては、一般的に JavaScript が多く使用されますが、ユーザのブラウザでサポートされているスクリプト言語であれば、言語を問いません。

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

コーディングによる対策

クロスサイトスクリプティング (XSS) を防ぐには、ユーザからの入力データの検証と、出力データの適切なエンコーディングを徹底します。
例えば、これらをコーディング規約として定義すること、コードレビューの観点に追加することが想定されます。
  • 入力データを表示する前に、データの長さ、型、構文の安全性を検証する
  • 出力データは HTML、XML などの出力フォーマットに従ってエンコードする

ただし、このような対策を行ったとしても大規模なアプリケーションで複数のクラス・メソッドにまたがるソースコードに潜む全て問題を従来の目視レビューだけで発見するのは不可能に近いとも言えます。
そこで、静的解析ツールでコードレビューを自動化して機械的にソースコードの問題を検出するようにします。

静的解析ツールJtestでクロスサイトスクリプティングを検出する

Parasoft Jtest にはクロスサイトスクリプティング(XSS)が発生するコードを検出する静的解析ルールがあります。
  • XSS の脆弱性の可能性から防御する [BD.SECURITY.TDXSS]
このルールは、悪意のあるスクリプトを含んでいる可能性のある入力データが、検証メソッドによるチェックを受けないまま出力メソッドに渡されている場合に違反をレポートします。

検出例 - Jtest 解析結果とソースコード:



このコードではユーザーがアプリケーションの外部から入力したユーザー名を画面表示するためのレスポンスデータを生成しています。
入力されたデータが不正なコードである場合、ユーザーの画面ではアプリケーションが意図しないスクリプトが実行されます。
偽のページが表示され、別の場所にリダイレクトされたり、ユーザーにデータの入力を促してアカウント情報の取得、ブラウザに保存されている Cookie 情報が取得されたりします。

修正例 - ソースコード:
ユーザーが入力したデータを使用する前に検証します。


入力されたデータに対して、文字列長のチェックやHTMLタグの属性値等に相当する全ての出力要素にエスケープ処理を行うvalidate() メソッドを経由させることでレスポンスには安全なデータだけが含まれるようにします。

Jtest「XSS の脆弱性の可能性から防御する [BD.SECURITY.TDXSS]」ルールでソースコードを解析することにより、 クロスサイトスクリプティング(XSS) 攻撃に対して脆弱なコードを発見し、改修することが可能になります。

Jtestが検出する脆弱性(抜粋)一覧

※ 本ページでご紹介した「XSS の脆弱性の可能性から防御する [BD.SECURITY.TDXSS]」ルールを含むセキュリティルール及びセキュリティコンプライアンス規約セットによる静的解析には「セキュリティコンプライアンスパック」のライセンス(有償)が必要です。

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

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

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

    03-4405-7853

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

お問い合わせ

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