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

当ページでは、「クロスサイトスクリプティング(XSS)」と呼ばれるサイバー攻撃の概要、攻撃手順やその被害の例、対策方法について分かりやすく図解を用いてまとめています。
 
 
 

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

クロスサイトスクリプティング(Cross-Site Scripting: XSS)とは、ユーザが入力した値を出力する箇所において、悪意のあるスクリプトを注入するサイバー攻撃。
 

攻撃された場合の被害

ページの見た目が改ざんされる

正規のドメインにアクセスしたとしても、攻撃者のスクリプトによって見た目が改竄されたページが表示されてしまう。
 

悪意あるスクリプトが実行される

攻撃者がユーザのCookieを盗み、そのユーザになりすましてWebサイトへアクセスすることが可能となる。
 

クロスサイトスクリプティングの種類

クロスサイトスクリプティングは主に以下の種類に分類される。
  • 反射型XSS (Reflected XSS)
  • 持続型XSS(Stored XSS)
  • DOM-based XSS
  • Universal XSS
 

反射型XSS (Reflected XSS)

反射型XSS (Reflected XSS)とは、主にURLにスクリプトを含ませ、そのリンクを被害者に踏ませることでスクリプトを実行させるタイプのXSS。
 
【攻撃手順】
① 攻撃者はユーザにスクリプトを含むURLをメールなどで送信する。
② ユーザは攻撃者の用意したURLへアクセスする。
③ Webサーバは攻撃者のスクリプトを含むコンテンツをユーザに返す。
④ユーザのブラウザでスクリプトが動作し、サイトの見た目が変化したり、Cookieを攻撃者に送信したりする。
 
 

持続型XSS(Stored XSS)

持続型XSS(Stored XSS)とは、アプリケーションのデータベース等にスクリプトを登録するXSS。
攻撃者は被害者に罠URLを踏ませる必要がなく、被害者が単にWebサーバへアクセスするだけでスクリプトが動作するのが特徴。
【攻撃手順】
①攻撃者は攻撃対象のWebサーバへアクセスする。
②攻撃者はスクリプトをWebサーバのデータベースへ登録する。
③ユーザはWebサーバへアクセスする。
④ユーザのブラウザでスクリプトが動作し、サイトの見た目が変化したり、Cookieを攻撃者に送信したりする。
 

DOM-based XSS

DOM-based XSSとは、DOMツリーに存在する不正なスクリプトをウェブページの表示してしまうことによって実行されるXSS。
必ずしもWebサーバへ通信が発生しないため、WAF(Web Application Firewall)で攻撃が防げない。
 

Universal XSS(UXSS)

Universal XSS(UXSS)とは、Webブラウザやブラウザの拡張機能の脆弱性を利用したXSS。
Webアプリケーション開発者側では対処することができない脆弱性。
 

対策方法

クロスサイトスクリプティングの攻撃を防止するための対策方法は以下の通り。
アプリケーション開発者用のコードベースの対策方法は、OWASP(Webアプリケーションセキュリティの研究組織)が提供する対策チートシートにまとまっている。
 

特殊文字をエスケープ処理する【根本的な対策】

HTMLでは記号「<」「>」「&」「”」「’」は特別な意味を持つため「特殊文字」と呼ばれる。
この特殊文字単なる文字列として出力する際は、下記のように別の文字列に置き換えて出力することでスクリプトが挿入されることを防ぐことができる。
この置き換え処理をエスケープ処理という。
特殊文字置き換え後の文字列
<&lt;
>&gt;
&&amp;
"&quot;
'&#39;
 

その他の対策TIPS

  • 属性値は「"」で囲む。
  • URL出力箇所では、スキーム「javascript:」を不要であればブロックする。
  • <script>タグやイベントハンドラの中にはユーザからの入力値はなるべく含めない。
 

脆弱性が無いソフトウェアを利用する

利用しているライブラリやフレームワーク、ブラウザにクロスサイトスクリプティングの脆弱性があると攻撃を受けてしまう可能性が出てくる。
脆弱性があると公開されているソフトウェアは使わずに、なるべく最新バージョンにアップデートする。
 

WAFを導入する

WAF(Web Application Firewall)とは、ブロックする機能のこと。
万が一エスケープの対策の漏れが起きた際の予備の防御策としてWAFの導入が有効。
ただし、DOM-based XSSやWAFを回避する攻撃は防ぐことができないので注意。
 

Content-Security-Policy(CSP)を利用する

Content-Security-Policy(CSP)とは、そのページが読み込める(埋め込める)リソースの条件を指定・制限できるブラウザのセキュリティ機能。
正規で利用するリソースのみを読み込み許可することで、XSSの脆弱性があっても被害を軽減できる。
詳しくはContent-Security-Policy(CSP)を参照!
 

関連情報・参考情報

その他のサイバー攻撃・セキュリティ関連記事も良かったらご参照ください!