クロスサイトスクリプティング(XSS)とは【仕組みと対策】

2019年7月23日火曜日

Web技術

クロスサイトスクリプティング(XSS)とは【仕組みと対策】

皆さんはクロスサイトスクリプティングという言葉を聞いたことがありますでしょうか。

この記事を読んでくれているわけですから、少なくとも、この言葉を簡単に聞いたことはあるかもしれませんね。

この記事では、出来る限りウェブシステムやウェブサービスの仕組みの基本的な部分も説明しながら、どうしてクロスサイトスクリプティングが起こるのか、そしてどうすればクロスサイトスクリプティングによる被害を受けずに済むのかということについて書いていければと思います。


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

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

クロスサイトスクリプティングとは一言で言うと、
悪意のあるスクリプトを他人のウェブサイトに埋め込むことで、被害を生じさせるような攻撃方法
です。

ここでスクリプト、と言う言葉が出てきましたがこれはJavaScriptというプログラムのことを指しています。

プログラミング言語にはいろいろな種類がありますが、このJavaScriptの特徴としてはウェブブラウザ上で動く、というものがあります。

ウェブブラウザというのは、皆さんがウェブサイトを見るときに使うGoogle ChromeやFirefox、Safari、Edge、Internet Explorerといったようなソフトウェアのことです。


普段このJavaScriptは、これらのウェブブラウザ上で動くことによって、あなたが快適にウェブサイトを閲覧できるように動いてくれています。

しかし、このJavaScriptは非常にいろいろなことができるプログラムですから、もしそのJavaScriptを記述する人に悪意があれば、閲覧者を有害なウェブサイトに誘導したり、いろいろな悪いこともできてしまうのです。

もしウェブサイトの作成者に悪意がなくても、この記事で説明するクロスサイトスクリプティングの対策がしっかりされていないと、悪意を持った人たちに強制的にJavaScriptを埋め込まれてしまうことがあります。


これが、クロスサイトスクリプティングという攻撃です。



具体的にどうやってクロスサイトスクリプティング(XSS)が行われるか

具体的にどうやってクロスサイトスクリプティング(XSS)が行われるか

例えば、SNS掲示板のようなウェブサービスを考えてみましょう。

これらのサービスには、誰でも簡単に書き込みができて、その書き込みを大勢の人が閲覧できる、という特徴があります。


クロスサイトスクリプティングを目論む悪意のあるプログラマーたちは、こういったSNSや掲示板の書き込みとしてJavaScriptのプログラムを埋め込みます。


SNSや掲示板に書き込まれた情報は、普段はそれらのサービスを管理する会社や個人のデータベースに保管されています。

もしSNSや掲示板の書き込みの中に悪意のあるプログラムが紛れ込んでいると、それらの情報はそのデータベースに保存されることになります。

JavaScriptは先ほどご説明をしたように、クライアント側で動くプログラミング言語ですから、このプログラムをデータベースに保存しておくこと自体は、特に悪い影響を及ぼしません。


これらのJavaScriptのプログラムが悪さをするのは、書き込まれた情報を、閲覧者が実際に見ようとした時です。


SNSに対する投稿や掲示板に書き込まれた書き込みを誰かが見ようとしたときに、その人のウェブブラウザからサーバーに対して、投稿や書き込みを見るためのリクエストが送られます。

そのリクエストを受けたサーバーは、データベースから情報を取り出し、閲覧者が持っているコンピューターに情報を送ります。

そしてまさにその時、悪意を持ったプログラマーが埋め込んだプログラムが動作するのです。


SNSの投稿や掲示板の書き込みに埋め込まれた悪意のあるJavaScriptプログラムは、閲覧者のコンピューターに送られ、その情報はウェブブラウザ上で表示されようとしますね。

その時ウェブブラウザは、埋め込まれたJavaScriptプログラムを、悪意のあるものと知らずに起動させてしまうのです。

そうすることによって、悪意のあるプログラマーは、例えば自分が運営する有害なウェブサイトに対して閲覧者を誘導したりするのです。


こういった攻撃を、防ぐ方法は無いのでしょうか。



クロスサイトスクリプティング(XSS)に対する対策方法

クロスサイトスクリプティング(XSS)に対する対策方法

実は閲覧者側には、こういった攻撃を防ぐ方法は基本的にはあまりありません。

ブラウザ上でJavaScriptが一切動かないようにすることは可能ですが、そうすると、通常の有益なJavaScriptプログラムまで、全く動作しなくなってしまいます。


他に対策方法があるとすれば、セキュリティが甘いようなウェブサイトを閲覧しない、といったことぐらいしかないでしょう。


このクロスサイトスクリプティングの原因としてはSNSや掲示板を作ったプログラマーが、セキュリティー対策を怠ってしまったことが挙げられます。

つまり、開発者側が適切にセキュリティー対策を行っていれば、このクロスサイトスクリプティングという攻撃は防ぐことができるのです。




では、どうすればこのクロスサイトスクリプティングを防ぐことができるのでしょうか。

クロスサイトスクリプティングを防ぐために一般的に取られる手法としては、サニタイジングというものがあります。

サニタイジングと言うと少し難しく聞こえてしまうかもしれませんが、単純に、投稿や書き込みに含まれているJavaScriptプログラムを無効化してしまうことです。


プログラムは一文字でも間違えると正確に動かないものですから、そのプログラムに含まれる文字を少し変えてしまうのです。

一般的にプログラムは半角文字で書かれます。
ですから、プログラムに含まれている可能性が高い半角記号を見つけたら、その文字を全角の記号に置き換えてしまうのです。


SNSの投稿や掲示板の書き込みをデータベースに保存する前に、このサニタイジングを行うことによって、データベースに保存される文字列に含まれるJavaScriptプログラムは無効化されてしまうのです。

これをやっておくことによって、悪意のあるJavaScriptが閲覧者のブラウザ上で悪さをすることを防ぐことができるのです。


ウェブサービスを作るときは、サニタイジングを忘れないようにしよう!

ウェブサービスを作るときは、サニタイジングを忘れないようにしよう!

皆さんも、もし自分のウェブサイトやウェブサービスを作って公開する機会があれば、このサニタイジングを行うことを忘れないようにしてください。

それを行うことによって、クロスサイトスクリプティングだけでなく、SQLインジェクションなどというような、その他の攻撃からもウェブサイトを守ることができます。


これらを怠ってセキュリティー被害が出てしまった場合は、ウェブサービスのユーザ様に迷惑がかかるだけでなく、サイト運営者の責任が問われることにもなりかねません。

是非セキュリティーには気を遣ってウェブサービスを作成していきたいものです。


この記事が、あなたがウェブセキュリティを学ぶ上での助けになれば幸いです。

この記事を読んでくださり、ありがとうございました。