Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2013年3月16日
最終更新日:2013年12月26日

クロスサイト・スクリプティング(XSS)対策(Java編)

クロスサイト・スクリプティング(以下、XSS)の対策は以下の記事を参照してください。

これを Java で実現すると以下のようになります。

根本的対策

■1.HTTP レスポンスヘッダーに文字コードを指定する
Java でレスポンスヘッダーの Content-Type に文字コードを指定するには、サーブレットと JSP(Java Server Pages)で異なります。なお、動作環境は Tomcat を使用します。

・サーブレット
Tomcat ではデフォルトでサーブレットのレスポンスヘッダーに Content-Type を出力しません。ですので、以下のように自分で出力する必要があります。

このサーブレットの Content-Type は以下のようになります

・JSP
Tomcat は JSP を表示する際、レスポンスヘッダーに Content-Type を UTF-8 でデフォルトで出力します(pageEncodingがutf-8の場合)。ですが、明示的に指定した方がよいでしょう。

JSP でレスポンスヘッダーに Content-Type を出力するには、Page ディレクティブで以下のように記述します。

この JSP の Content-Type は以下のようになります。

■2.HTML 要素の属性は""(ダブルクオーテーション)で囲む
これはそのままですが、HTML の属性は''(シングルクォーテーション)ではなく、""(ダブルクオーテーション)で囲むようにしてください。

■3.出力する全ての要素に対してエスケープ処理を行う
Java でエスケープ処理を行うために、Apache Commons lang 3のStringEscapeUtils#escapeHtml4 メソッドを利用します。このメソッドは、&<>" をエスケープしてくれます。

なお、2の対策で HTML の属性を""(ダブルクオーテーション)で囲んでいるため、''(シングルクォーテーション)はエスケープの必須要件にはなりません。

・サーブレット

・JSP

このサーブレットとJSPを表示しても、&<>"はエスケープされるためスクリプトは実行されません。

■4.URL は「http://」か「https://」で始まるもののみ出力する
URL 判定の実装例は以下のようになります。

■5.<script></script> 要素の内容を動的に生成しない
これはそのままですね。

保険的対策

■1.入力値のチェックを行う
XSS で危険な文字である、&<>"' が文字列に含まれているか正規表現でチェックする実装例です。

■2.Cookie に HttpOnly 属性を付与する
Cookie に HttpOnly 属性を付与するには、サーブレットで以下のように記述します。

なお、Tomcat のセッション ID に HttpOnly 属性と secure 属性を付与する方法は、以下の記事を参照してください。

■3.Trace メソッドを無効化する
Apache の Trace メソッドを無効にするには、httpd.conf に以下の行を追加し、Apache を再起動します。


スポンサーリンク




カテゴリー:Webアプリケーションセキュリティ

Twitter でも、いろんな情報を発信しています。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA