HTMLインジェクション
読み方:エイチティーエムエルインジェクション
HTMLインジェクションとは
HTMLインジェクションとは、HTMLの特殊文字をWebサイトに正規の指示と誤認させることで混入できてしまう、HTMLで構築されたWebサイトの脆弱性です。
この脆弱性を悪用されると、サイトの内容改ざんやユーザアカウントやパスワードといった機密情報の漏洩、閲覧者に有害なスクリプトの実行などサイト運営者の意図しない被害が生じる恐れがあります。
- コンテンツインジェクション(Content Injection)
HTMLインジェクションの脆弱性を悪用して、HTMLを含むデータをWebサイトに混入されることにより、コンテンツ内容が改ざんされるケースを指します。
- フレームインジェクション(Frame Injection)
フレーム構造のWebページにて、フレーム単位で内容を改ざんされるケースを指します。
HTMLインジェクションによるリスク
- 個人情報の漏洩
スクリプトによりフォームに入力した情報が盗まれます。他に偽りのログイン画像の表示によりIDやパスワード、クレジットカード情報なども盗まれる場合があります。
(スクリプトインジェクション、XSSなども含む)
- セッションハイジャック
CookieからセッションIDを盗まれ、なりすましによる被害に遭います。
(スクリプトインジェクション、XSSなども含む)詳しくはこちらをご確認ください
- コンテンツの改ざん
掲示板などの内容が不正に書き換えられて、捏造された感想や不正なURLなど偽情報に惑わされます。
(コンテンツインジェクションやフレームインジェクションなども含む)
HTMLインジェクションへの対策
閲覧者はHTMLインジェクションに対して十分な理解と危機意識をもつ必要があります。またWebサイト運営者は閲覧者に被害を与えないように以下のような対策を行う必要があります。
- 対策1 サニタイジング(Sanitizing)
サニタイジングとは、HTMLとして特殊な意味をもつ文字を、別の文字列に変換し無害化することを指します。たとえば、「<」や「>」などの特殊文字は、HTMLでタグの一部として認識されます。タグと認識されるとHTMLの命令の一部だと認識されるため、フォームから入力されると表示用の文字に変換されます。サニタイジングが機能していない場合は変換されません。サニタイジングによって、タグを文字として認識させるために「<」を「<」、「>」を「>」に変換します。変換された文字は、表示用の文字として認識されるため、閲覧者のブラウザ上では、ただの文字の「<」や「>」と表示されます。サニタイジングによって、変換前と変換後の文字列の違いや変換後に閲覧者のブラウザ上での表記を以下の「タグの変換例」で示します。
タグの変換例
【入力された文字列】 <b>サニタイジング</b>
【内部的にタグを文字列として認識するために変換】 <b>サニタイジング</b>
【ブラウザ上での表示は入力の文字列のまま】<b>サニタイジング</b>
タグを変換されなかった場合、ブラウザ上に「サニタイジング」と太字の文字列が表示されます。
- 対策2 入力値の制限
力値を制限することで、HTMLやスクリプトの入力を防げます。たとえば、郵便番号や電話番号の入力を要求するフォームでは数字以外の入力を禁止することで、HTMLやスクリプトの不正な入力を防止できます。また、入力する文字数を制限することでも同様の効果を得ることが可能です。
HTMLインジェクションの関連語
- スクリプトインジェクション(Script Injection)
JavaScriptを含んだデータをWebページに混入されるケースの総称です。誰がJavaScriptを含んだデータを送信するか、といった点で複数の悪用のされ方があります。
- クロスサイトスクリプティング(XSS)
掲示板やメールに記載されたURLから、害のあるスクリプトを混入し、脆弱性のある標的サイトのドメイン権限で実行させるHTMLインジェクションの一種です。クロスサイト(サイト横断)という名称は、この脆弱性と攻撃が発見された当初、脆弱性のあるサイトから攻撃者のサイトへの遷移を利用していたことから名づけられました。しかし応用的な攻撃方法が増え、現在はサイト遷移を含まないケースでもXSSと呼ばれる場合があります。身に覚えのない挙動や個人情報が搾取されます。