Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Xssオプションとは?

オプション名 オプションの機能詳細
-Xss スレッド・スタック・サイズを設定します。
スレッド・スタックは、各Javaスレッドが内部的に使用するために割り当てられるメモリー領域です。ここにスレッドのローカルの実行状態が格納されます。

例えば、次のように指定すると、デフォルトのスタック・サイズを512KBに設定可能です。

java -Xss:512k myApp

Xssオプションは、以下のような場合に設定すべきですオプションとなっています。

OutOfMemoryErrorの場合、Xssの設定値が大きすぎるのが原因ため、Xssオプションを使用して調整します。

Xssの設定・チューニング方法

-Xssオプションは、バイト単位でスタックサイズを指定可能です。

例えば、スタックサイズを256KBで設定する際、下記のように指定します。

-Xss512k

なお、mainメソッドが実行されるスレッドは、Java VMの起動前に作成されたスレッド(Java APIで作成されたスレッドではない)のため、-Xssオプションで指定したスタックサイズにはなりません。

自動コンパイル用スレッド(自動的にJDK/JRE内で実行されるJavaメソッドをコンパイルする専用スレッド)のスタックサイズは“-XX:CompilerThreadStackSizeオプションで指定できます。

ただし、通常であれば自動コンパイル用スレッドのスタックサイズは指定の必要がありません。

-XX:CompilerThreadStackSizeオプションは、キロバイト単位で自動コンパイル用スレッドのスタックサイズ指定します。

例えば、スタックサイズを1024KBに設定する場合、以下のように指定しましょう。

-XX:CompilerThreadStackSize=1024

Xssのデフォルト値について

Xssのデフォルト値は以下の通りです。

プラットフォーム デフォルト
Windows IA32 64KB
Linux IA32 128KB
Windows x86_64 128KB
Linux x86_64 256KB
Windows IA64 320KB
Linux IA64 1024KB (1MB)
Solaris Sparc 512KB

※参照:-X コマンドライン オプション

XssとXmxの違いは?

XssとXmxの違いは下記の通りです。

Xmxオプションについては、以下の記事で詳しく解説しています。

【関連記事】

▶︎javaコマンド「-Xmx」オプションのデフォルトや確認・設定方法を紹介!

ちなみに、Xmsオプションについては、以下の記事で解説しています。

【関連記事】

▶︎javaコマンドの「-Xms」について解説|メモリ・確認方法などまとめ

JavaのXSS(クロスサイトスクリプティング)について

クロスサイトスクリプティング (XSS)とは、利用者の入力データを使ってページを動的に出力するWebアプリケーションの脆弱性から、ブラウザ上で悪意のあるスクリプトを実行させるセキュリティ攻撃のことです。

XSSの多くが、攻撃者が用意した「電子メール内に入れ込んだリンク」や「Webページ」から、わざと脆弱性のあるWebサイトに誘導する形になります。

このことから、クロスサイト (サイトをまたがる) スクリプティングと名前がつけられました。

例えば、簡単なものだと利用者がWebフォームのテキストボックスにテキストを入力して送信すると、そのテキストを含んだWeb(HTML)ページが結果として返ってくるWebアプリケーションを見てみましょう。

テキスト入力部分に、下記のようなテキストを入力したとします。

alert("クロスサイトスクリプティング");

上記のテキストは、実行されると画面に「クロスサイトスクリプティング」と書かれたポップアップが表示されます。

そのため、Webアプリケーション側で入力データのチェックを行っていない場合、出力された Webページに上記スクリプトがそのまま含まれて実行されてしまいます。

上記は簡単なポップアップ表示でしたが、攻撃者はもっと悪意のあるスクリプトを使用して、Cookie情報の詐取・偽ページへ誘導・第三者へのフォーム情報の送信など、さまざまな操作ができてしまいます。

このようなXSSは、Javaで作成したアプリケーションでも起こりうることです。

そのため、しっかり対策する必要があります。

XSSの種類

XSS攻撃には、大きく分けて「Stored XSS Attacks」と「Reflected XSS Attacks」の2つがあります。

Stored XSS Attacksは、悪意のあるコードが、永久的にターゲットのサーバ上(データベースなど)に格納されるXSS攻撃です。

利用者は格納されている情報を要求する際に、サーバから悪意あるスクリプトを取得し、実行してしまいます。

一方、Reflected attacksは、リクエストの一部としてサーバに送信された悪意のあるコードが、エラーメッセージや検索結果、その他さまざまなレスポンスからリフレクション(プログラムがプログラム自身を操作する機能)されるXSS攻撃です。

利用者が、悪意のあるリンクをクリックするか、攻撃者が細工したフォームを送信すると、挿入されたコードが利用者のブラウザに攻撃を反映した結果を返します。

その結果、信頼できるサーバからきた値となっているためブラウザは悪意のあるコードを実行してしまうのです。

Stored XSS Attacks と Reflected XSS Attacks の両方とも、出力値をエスケープすることでXSS攻撃を防げます。

利用者が入力したデータを、そのまま出力してしまっている場合、XSSの脆弱性にさらされている状態です。

XSSの対策方法

XSSが起きないように対策するには、アプリケーション利用者からの入力データの検証と、出力データの適切なエンコーディングの徹底が重要です

入力データを遷移先のページで表示する前に必ず、データの長さやデータ型、構文などが問題ない範囲内であるかどうかを検証しましょう。

出力データは、HTMLやXMLなど、出力フォーマットに沿って適切にエンコードします。

また、XSSの脆弱性に対する対処法として、HTMLのマークアップ言語で特定の意味を持つ文字をエスケープする必要があります。

必要に応じて、3種類のエスケープを使い分けましょう。

エスケープの3つの種類
  • Output Escaping
  • JavaScript Escaping
  • Event handler Escaping

Output Escaping

XSSの脆弱性への対処法として、HTML特殊文字をエスケープすることは基本的な内容です。

HTMLにおいてエスケープが必要な特殊文字とエスケープ後の例は、下記の通りになっています。

エスケープ前 エスケープ後
& &
< &lt;
> &gt;
&quot;

JavaScript Escaping

JavaScript特殊文字をエスケープすることも、XSSの脆弱性への対処法の一つです。

利用者の入力からJavaScriptの文字列リテラルを動的に生成する場合に、エスケープを行います。

JavaScriptにおいてエスケープが必要な特殊文字とエスケープ後の例は、下記の通りです。

エスケープ前 エスケープ後
\’
\”
\ \\
/ \/
< \x3c
> \x3e
0x0D(復帰) \r
0x0A(改行) \n

Event handler Escaping

JavaScript のイベントハンドラ値をエスケープする場合、「f:h()」や「f:js()」を使うのではなく、「f:hjs()」を使用します。

「${f:h(f:js())}」と同義ですね。

理由としては、下記のようイベントハンドラの値に「alert(“XSS Attack”);」を指定された場合、別のスクリプトを挿入できてしまいます。

そのため、文字参照形式にエスケープ後、HTMLエスケープをが必要です。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。