Edgio Blog

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

前回の記事では、クロスサイトスクリプティング(XSS)について解説しました。攻撃を防ぐためには攻撃の手法を知ることが重要になります。本記事では、クロスサイトスクリプティング攻撃の具体的な対策について、管理者側、ユーザー側の両方の側面から解説していきます。 

クロスサイトスクリプティングへの対策は?
管理者編

クロスサイトスクリプティングへの対策について、管理者やサービス提供者ができることを説明しましょう。 

サニタイジング(エスケープ)処理を施す

反射型XSSや格納型XSSへの対策として、HTMLタグや本文に頻出する特定の文字に対してサーバー側で「サニタイジング(sanitizing、無害化)」と呼ばれる処理を行います。具体的には、ウェブページの表示に影響する特別な記号文字を、「HTMLエンティティ」と呼ばれる文字列に置換、または除去します。サニタイジングが必要な文字としては、以下が挙げられます。

サニタイジング前の文字HTMLエンティティ文字の役割
<&lt;タグの開始
>&gt;タグの終了
&&amp;エンティティや文字参照の開始
&quot;属性の値の開始や終了
&#39;特殊文字をそのまま表示

入力フィールドの値にHTMLを入力する必要がある場合は、その属性値を必ず「”」(ダブルクォーテーション)で囲み、サニタイジングします。出力段階の処理だけでなくウェブページやウェブアプリを開発する時点でこれらを適切にサニタイジングしておけば、さらに安心ですね。 

 JavaScriptの記述方法を変える

DOMベースのXSS対策として、ウェブアプリを開発する際にJavaScriptの「document.write()」メソッドの使用をやめ、特定のHTML要素を書き換える「innerHTML」プロパティや「createElement()」などDOM操作用のメソッド・プロパティを使用するようにします。特に「document.write()」は、HTML5での使用が「非推奨」とされました。 

入力値を制限する(バリデーションチェック)

特定の文字以外の入力を受け付けないよう、フィールドの入力値に対して制限を設定することを「バリデーションチェック(validation check)」といいます。例えば生年月日や電話番号、郵便番号であれば数字だけ、しかも文字数制限もできますので、正しく設定していればスクリプトが紛れ込むことはありません。自由記述欄のように文字種や文字数に制限を設けられない場合は、前述のサニタイジングをしっかり行ったうえで、欄内にHTMLタグを記述できないようにする、記述できるHTMLタグを制限するなどの対策をするとよいでしょう。

リンクの出力が必要な場合は、URLが「http://」または「https://」で始まるもののみを許可する設定にしましょう。 

動作環境を最新版にアップデートする

クロスサイトスクリプティングの攻撃者は、脆弱性のあるサーバーを狙います。そのため、ウェブサーバーやウェブアプリ、ウェブサイト構築に使う言語のバージョンを常にアップデートしておきましょう。特にJQueryなどで使用するJavaScriptには要注意です。

ウェブサイト構築にWordPressを使用している場合は、phpやMySQLのアップデートだけではなく、プラグインの自動アップデート機能を有効にする、開発者の更新頻度が高くないプラグインの使用をやめるなどの対策も有効です。 

 WAFを導入する 

WAFとは「Web Application Firewall」のことで、ウェブサイトやウェブアプリへのアクセスを監視し、攻撃を検知・防御するセキュリティソリューションです。多くの企業で導入されているFirewallやIDS(Intrusion Detection System、侵入検知システム)・IPS(Intrusion Prevention System、侵入防止システム)はWAFとは保護するレイヤが異なるため、それらだけでウェブサイトやウェブアプリを安全に運用することは困難です。

当初WAFはセキュリティ機器・サーバーソフトウェアとして配置する必要があり導入・運用コストの高さが指摘されていました。しかし、最近では「クラウド型WAF」と呼ばれるサービスが登場したりSaaSメニュー内にWAF機能が追加されたりして、以前よりも安価に導入・運用できるようになっています。 

クロスサイトスクリプティングへの対策は?
ユーザー編

完全な防御は難しいですが、ユーザー側でも実施できる対策があります。 

不審なURLリンクをクリックしない

反射型XSSでは、攻撃者はユーザーの入力に対しスクリプトを付加する必要があるので、まず外部のウェブサイトへ誘導しようとします。不審なメール・SMS・インスタントメッセージを受け取ったら、「本当かな?大丈夫かな?」と疑うことが大事です。

また、格納型XSSでは、ウェブページに書かれているURLリンクをうっかりクリックしない注意が必要です。パソコンであれば、URLリンクにマウスオーバーするとウェブブラウザの下部にリンク先のURLが表示されるので、それを確認するのが手っ取り早い対策でしょう(表示URLを偽装されることもあるので、確実ではありません)。 

ウェブブラウザを最新版にアップデートする

クロスサイトスクリプティングは、DOMベースのXSSのようにウェブブラウザ自体の脆弱性を突いて行われることもあります。そのため、ウェブブラウザを常に最新版にアップデートしておきましょう。 

セキュリティ対策ソフトを導入する

セキュリティ対策ソフトには、不審なウェブサイトをブラックリストとして保持しておいて不正と思われる通信を自動的に遮断したり、不正なスクリプトの実行に対して警告を発したりする機能があります。 

まとめ

独立行政法人情報処理推進機構(IPA)が公開しているソフトウェア等の脆弱性関連情報に関する届出状況によると、2022年度 第1四半期(1月~3月)に届出された脆弱性のうち62件がクロスサイトスクリプティングに関するものでの、過去2年間の累計でも種類別割合全体の約6割を占めています。また、届出された脆弱性にまつわるウェブサイトへの影響として挙げられる「本物サイト上への偽情報の表示」「データの改ざん、消去」「ドメイン情報の挿入」が全体の約8割を占めており、このうちの多くにクロスサイトスクリプティングが関わっていると推測されます。

クロスサイトスクリプティングは、いったん攻撃が成功してしまうと大きな被害が発生しやすい攻撃です。運営するウェブサイトやウェブアプリの脆弱性が原因で「個人情報が流出した」「不正なプログラムをダウンロードした」などといった被害が出ると、被害者への迅速な対応だけでなく、最悪の場合ウェブサイトの公開を停止したり、ウェブアプリの提供を中断・終了したりしなければならなくなるなどの甚大な影響が生じます。

管理者やサービス提供者として、システム側の対応、セキュリティ強化を徹底しましょう。また、ユーザーとして、日頃からセキュリティ意識を高め、攻撃者の罠に引っかからないように気を付けましょう。