せっかく一生懸命Webサイトを制作しても、ネット上にあるあらゆるサイバー攻撃によってシステムが攻撃されるのはたまったもんじゃありません。
そこで今回もバックエンドの基礎知識として、サイトを守るためのWebセキュリティ対策を学んで行きたいと思います。
WEBセキュリティ対策とは
主にWebサイトのシステムの「脆弱性」を狙ったサイバー攻撃を防ぐための策を意味します。
「脆弱性」とはセキュリティ上の欠陥のことで、「セキュリティホール」とも呼ばれます。
脆弱性を狙った主な3つの攻撃
- SQLインジェクション
- XSS(クロスサイトスクリプティング)
- ブルートフォースアタック(総当たり攻撃)
前回はSQLインジェクションを解説しました。今回はXSS(クロスサイトスクリプティング)について解説していきたいと思います。
XSSとは
XSS(クロスサイトスクリプティング)とは、あるWebサイトの脆弱性を見出した攻撃者が、悪質なサイトへ誘導(サイトをクロス)するスクリプトを実行し、そのWebサイトに訪れるユーザーの個人情報などを詐取したり、時にはマルウェア感染させたりするサイバー攻撃のことを言います。
標的サイトから別サイトへ誘導(クロス)することから、XSSと言われています 。
XSSの攻撃の流れ
XSSの攻撃の流れをお借りしたイメージ画像より説明しましょう。

- 攻撃者CがXSSの脆弱性があるA社のサイトを見つける。次にA社のユーザーがよく閲覧するようなサイトの掲示板サイトBへ罠を仕掛ける。
(罠の例:スクリプトが埋め込まれたリンクのURLを掲示板へ投稿するなど) - ユーザーが、罠が仕掛けられた掲示板サイトBを訪問
- ユーザーがスクリプトが仕込まれたリンクをクリックする。
すると、仕掛けられた罠にはまる。スクリプトが実行される。 - ユーザーのパソコンにスクリプトの情報が保存された状態で、仕掛けられたリンクからA社のサイトへ移動(クロスサイト)する。
- スクリプトによって、A社サイトに似せた偽サイトへ移動してしまう。
- 偽サイトにてユーザーがA社サイトと思い込んで、個人情報などの入力を行う。
- ユーザーは悪意のある第三者により個人情報が奪われたり、マルウェアを感染させられたりする。
いかがでしょうか。XSSのイメージがつかめましたか?
XSSでは、上記の例で示したように複数のサイトを跨いで攻撃が実行されます。
そしてXSSに対して脆弱性があるサイトに、スクリプトが埋め込まれてしまうところから攻撃が始まっているのです。
XSS攻撃の主な原因
クロスサイトスクリプティングの根本的な原因は、攻撃者が不正なスクリプトを挿入することができる環境を与えてしまうことにあります。
つまり、クロスサイトスクリプティングに対して脆弱性を持つ動的サイトの放置が原因です。
スクリプト文章にはユーザーが保有する個人情報を、標的サイトとは別のサイトに送信するように設定されており、これが直接的な被害を生み出してしまいます。
「JavaScript」や「HTMLタグ」が使われることがある
クロスサイトスクリプティングは、スクリプトを利用したサイバー攻撃とお話ししました。
使用されるスクリプトには様々なものがありますが、なかでも「JavaScript」や「HTMLタグ」はよく使用されている言語です。
特に汎用性の高いJavaScriptを用いた攻撃は著しい被害を及ぼす傾向があるので、警戒が必要だと言われています。
XSSの種類
反射型XSS(non-persistent/Reflected XSS)
リクエストしたユーザー(被害者)にスクリプトが返ってくるため、「反射型XSS」と呼ばれています。
攻撃者は偽メールや偽サイトに不正なスクリプトを含んだリンクを用意し、ユーザーを脆弱性のあるWebサイトに誘導(リクエストさせる)します。
ユーザーのブラウザで不正なスクリプトを実行させることで、情報の詐取やマルウェア感染などを行っています。
格納型/蓄積型/持続型XSS(Stored/Persistent XSS)
格納型XSSでは、攻撃者があらかじめWebアプリケーションに直接スクリプトを格納しておきます。
こうしておくことで該当のページをユーザーが閲覧するたびに、不正なスクリプトが実行されます。
該当のページにアクセスするだけで攻撃可能なため、反射型XSSとは異なり罠を仕掛けたWebサイトの用意や、スクリプトを含む不正リンクをメール送信したりする必要はないのです。
DOM Based XSS
DOM(Document Object Model)は、HTMLやXMLを取り扱うためのAPIやデータ構造を定義したものを指します。
JavaScriptコードの脆弱性を悪用した攻撃で、サーバー側ではなくクライアントのWebブラウザ上で攻撃用の不正なスクリプトが実行されます。
また、DOM Based XSSの場合では、静的なHTMLの場合でもJavaScriptが利用されていれば攻撃対象となりえます。
XSS攻撃の対策
ユーザー(被害者)側の対策
最新のブラウザにアップデート
クロスサイトスクリプティングを防ぐには、使用しているWebブラウザやアプリを最新バージョンにしておくことが重要です。
バージョンが古いとXSSに限らず、何らかの脆弱性を抱えていることがあるので、更新があった場合はその都度アップデートをしておくことが必要です。
スクリプトの実行設定を無効化
ユーザーの大半は、Webサイトをブラウザで閲覧・利用しています。
つまり、Webブラウザのセキュリティ設定を見直してスクリプトの実行を無効化すれば、ブラウザ経由による攻撃を防ぐことが可能です。
社内でWebブラウザの設定を変更する場合は、システムの使用に問題がないかどうか確認をしてから行うことで対策できます。
セキュリティソフトの導入
個人ユーザー向けのウィルス対策ソフトにもXSS対策ができる機能が搭載されているので、なるべく利用するようにします。
ウィルス対策ソフトには、不正なスクリプトを検出してくれる機能や、正規のサイトを装った不正サイトへのアクセスをブロックする機能などがあります。
企業のIT管理者が行う対策
WAFを導入する
WAF(ワフ)とは、「Web Application Firewall」を略したファイアウォールの一種です。
「Webアプリケーションの脆弱性を悪用した攻撃」から、Webサイトを保護するセキュリティ対策のひとつで、Webセキュリティにおいて多方面に使用されています。
XSSからの攻撃を検出すると通信を遮断してログに記録しながら、同時にアクセス元に対してWebサーバーに代わってユーザーに警告メッセージを出してくれます。
不正なサイトへの誘導と思われるメールをブロックする
企業の社内メールに対してほとんどの企業がセキュリティ対策を行なっています。
私の会社はセキュリティ能力が高すぎて、逆にめんどくさいですが、、、
不正なサイトへのメールをプログラムが検知し、自動でブロックしてくれるソフトなどを導入するなどして対策を行います。
ネットワーク内部から不正サイトへのアクセスをブロックする
社内ネットワークにおいても何かしらの要因で不正サイトにアクセスしてしまう危険性があります。
社内のネット環境からサイトにアクセスしたときに、セキュリティ保護されていないような脆弱性を伴うサイトであれば警告が表示されたり、そもそも社内セキュリティによってアクセスブロックされる仕組みが必要です。
WEB制作者・管理者側に求められる対策
サニタイジング(エスケープ)処理をする
サニタイジング(エスケープ)処理とは、「<」や「“」といった区切りやタグなどの意味を持つ文字を、意味を持たない文字列に置き換え無害化する(サニタイジング)ことを指します。
サニタイジング(エスケープ)処理をすることで、スクリプトが制作側の意図に反した動作をしてしまうことを防ぐことができます。
ただし、サニタイジング(エスケープ)処理は悪意のあるスクリプトを無害化しているだけであり、スクリプトの流入自体は防ぐことができません。
有害なスクリプトの流入を阻止するには、WAFの導入が必要となります。
バリデーション処理(入力値の制限)
バリデーション処理(入力値の制限)とは、特定の文字以外の入力を受け付けない設定のことです。
たとえば、生年月日の入力フォームでは特定の範囲の数値しか受け付けないようにすることで、スクリプトが入り込むことはできなくなります。
また、任意の文字入力が必要な場合は、入力文字数に制限を設けることで長いコードの入力が困難になり、攻撃実行の危険性をある程度は抑えることができます。
ただし、バリデーション処理をJavaScriptを使ってブラウザ側で入力値の制限を行うと、攻撃者側がJavaScriptをオフにして不正スクリプトの入力ができてしまいます。
バリデーション処理を行う場合は必ずサーバー側で実施することが重要です。
出力時はhttp・httpsから始まるURLのみ許可する
URLに「JavaScriptスキーム」や「dataスキーム」などが含まれている場合でも、XSSのリスクは生じてしまいます。
入力するリンク先のURLは「http」または「https」から始まるもののみを許可することで、想定外の処理が実行されるリスクを防止できます。
詳しくは SSLとは?基本機能や導入メリット、認証の種類を初心者向けに簡単解説 をご覧ください。
今回のまとめ
XSSをすぐに理解することは難しいかもしれません。
しかし重要なのはXSSのような攻撃があるという認識と、サイトやサービスを作成する上でこの攻撃の可能性があることも踏まえてしっかりと対策をしておくことです。
やはり一番の対策はWAFの導入です。
またhttpsの保護されたリンクの使用などを徹底して行うことでWebサイトの脆弱性をなくすことができますので、WEBのセキュリティ対策はしっかりとやっておきましょう。
コメント