Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。
setHTML() は Element インターフェイスのメソッドで、HTML の文字列を構文解析・サニタイズして DocumentFragment に変換、それを要素のサブツリーとして DOM に挿入する、XSS 対策済みの安全な方法を提供します。
文字列で、サニタイズされ要素に挿入される HTML を定義します。
options 省略可以下のオプション引数を持つオプションオブジェクトです。
sanitizerSanitizer または SanitizerConfig オブジェクトで、入力のどの要素が許可されたり削除されたりするかを定義します。文字列 "default" で既定の構成になります。 一般的に、設定を再利用する場合、SanitizerConfigよりもSanitizerの方が効率的であることが期待されます。 指定しなかった場合、既定のサニタイザー設定が使用されます。
なし (undefined)。
options.sanitizer に次のようなものが渡された場合に例外が発生します。
setHTML() メソッドは、HTML の文字列を構文解析・サニタイズして DocumentFragment に変換、それを要素のサブツリーとして DOM に挿入する、XSS 対策済みの安全な方法を提供します。
setHTML() は、現在の要素のコンテキストで不正な要素(例:<table> 要素の外にある <col> 要素)を HTML 入力文字列から除去します。 その後、サニタイザー設定で許可されていない HTML エンティティを削除し、さらに XSS 対策上安全でない要素や属性を除去します。これらはサニタイザー設定でできるかどうかにかかわらず除去対象となります。
options.sanitizer 引数でサニタイザーの構成が指定されていない場合、setHTML() は既定の Sanitizer 構成で実行されます。 この構成では、XSS に安全と見なされるすべての要素と属性が許可され、安全でないと見なされるエンティティは許可されません。 独自のサニタイザーまたはサニタイザー設定を指定することで、許可または除去される要素、属性、コメントを選択できます。 なお、サニタイザー設定で安全でないオプションが許可されている場合でも、このメソッドを使用すると(暗黙的に Sanitizer.removeUnsafe() が呼び出されるため)、それらは除去されます。
信頼できない HTML 文字列を要素に挿入する際は、Element.innerHTML の代わりに setHTML() を使用しましょう。 また、安全でない要素や属性が仕様上できる必要がある場合を除き、Element.setHTMLUnsafe() の代わりに使用しましょう。
なお、このメソッドは入力文字列を常に XSS 攻撃に脆弱なエンティティからサニタイズするため、信頼型 API によるセキュリティ保護や検証は行われません。
この例は、setHTML() を使用して HTML 文字列をサニタイズし、挿入するいくつかの方法を示します。
この例では、異なるサニタイザーで呼び出される際のメソッドの「ライブ」デモを提供します。 コードでは、既定のサニタイザーと独自のサニタイザーを使用して、それぞれ HTML 文字列をサニタイズおよび挿入するためのボタンを定義しています。 元の文字列とサニタイズされた HTML はログに記録されるため、それぞれの結果を確認できます。
この HTML では、異なるサニタイザーを適用するための 2 つの <button> 要素、例をリセットするための別のボタン、および文字列を挿入するための <div> 要素を定義しています。
まず、すべてのケースで共通となる、サニタイズ対象の文字列を定義します。 これには <script> 要素と onclick ハンドラーが含まれており、いずれも XSS に対して安全でないとされています。 同時に、再読み込みボタンのハンドラーも定義します。
次に、既定のサニタイザーで HTML を設定するボタンのクリックハンドラーを定義します。 これにより、HTML 文字列を挿入する前に、すべて的安全でないエンティティが除去されます。 Sanitizer() コンストラクターの例で、どの要素が除去されるかを正確に確認できます。
次のクリックハンドラーは、独自のサニタイザーを使ってターゲット HTML を設定します。このサニタイザーは、<div>、<p>、<script> 要素のみが許可されるように設定します。 setHTML メソッドを使用しているため、 <script> も同時に除去されることに注意してください。
「既定」と「allowScript」ボタンをクリックすると、それぞれ既定のサニタイザーと独自のサニタイザーの効果を確認できます。 いずれの場合も、サニタイザーで明示的に許可した場合でも、<script> 要素と onclick ハンドラーは除去されることに注意してください。
| HTML Sanitizer API # dom-element-sethtml |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年9月25日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.