
DOMPurify v3.4.13
DOMPurify - HTML、MathML、SVG向けのDOM専用・超高速・超寛容なXSSサニタイザーです。DOMPurifyは安全なデフォルト設定で動作しますが、多くの設定オプションとフックを提供します。デモ:
DOMPurify
DOMPurify は、HTML、MathML、SVG に対応した、DOM のみで動作する超高速・超高耐性の XSS サニタイザーです。
使い方も非常に簡単で、すぐに始められます。DOMPurify は 2014年2月に開発が開始され、現在はバージョン v3.4.15 に達しています。
DOMPurify は JavaScript として動作し、すべてのモダンブラウザ(Safari (10+)、Opera (15+)、Edge、Firefox、Chrome、および Blink・Gecko・WebKit を使用するほぼすべてのブラウザ)で動作します。MSIE やその他のレガシーブラウザでも壊れることはありません。単に何もしないだけです。
DOMPurify v2.5.9 は MSIE をサポートする最新バージョンです。MSIE と互換性のある重要なセキュリティアップデートについては、2.x ブランチ を使用してください。
自動テストは、プッシュのたびに現在のエンジン(Ubuntu、macOS、Windows 上の Chromium、Firefox、WebKit)で 9 種類のブラウザ/OS の組み合わせをカバーし、別のマトリックスでは古いエンジンのスナップショット(約 3 年前の Chromium 110、Firefox 108、WebKit 16.4 あたりまで)でスイートを再実行するため、古いブラウザでのリグレッションも検出されます。また、jsdom 上で DOMPurify を Node.js v20、v22、v24、v25、v26 でも実行しています。古い Node バージョンでも動作することは知られていますが、保証はありません。
DOMPurify は、Web 攻撃と XSS に関する豊富なバックグラウンドを持つセキュリティ専門家によって書かれています。ご安心ください。詳細については、セキュリティ目標と脅威モデル もお読みください。ぜひ、本当に読んでください。そして、詳細な内容を楽しみたい方は、攻撃クラスとバイパス履歴 のページに、DOMPurify が防御するパーサー変異、名前空間、クロバリング、テンプレートのトリックがカタログ化されています。
DOMPurify プロジェクトは、HTML Sanitizer API の作成に影響を与えました。この API はすでに多くのブラウザで提供されています。同じ機能は現在、WHATWG HTML 仕様 で直接標準化されています。
目次
- 何をするものですか?
- どうやって使うのですか?
- デモはありますか?
- セキュリティ バグを見つけたら?
- 浄化のサンプルをいくつか見せてください
- 何がサポートされていますか?
- Internet Explorer のようなレガシーブラウザはどうですか?
- DOMPurify と Trusted Types はどうですか?
- DOMPurify を設定できますか?
- 永続的な設定
- フック
- 削除された設定
- 継続的インテグレーション
- セキュリティメーリングリスト
- 貢献者は誰ですか?
何をするものですか?
DOMPurify は HTML をサニタイズし、XSS 攻撃を防ぎます。たとえば、汚れた HTML でいっぱいの文字列を DOMPurify に渡すと、(設定を変更しない限り)クリーンな HTML を含む文字列が返されます。DOMPurify は危険な HTML を含むすべてを除去し、それによって XSS 攻撃やその他の厄介なものを防ぎます。また、非常に高速です。ブラウザが提供するテクノロジーを利用して、それを XSS フィルターに変換しています。ブラウザが速ければ速いほど、DOMPurify も速くなります。
どうやって使うのですか?
簡単です。Web サイトに DOMPurify を含めるだけです。
圧縮されていないバージョンを使用する場合(ソースマップ付き)```html
### 圧縮・テスト済みの本番バージョンを使用する場合(ソースマップあり)```html
<script type="text/javascript" src="dist/purify.min.js"></script>
その後、以下のコードを実行して文字列をサニタイズできます。```js const clean = DOMPurify.sanitize(dirty);
Angularや類似のフレームワークでの作業が好きなら、こちらもどうぞ:```js
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize('<b>hello there</b>');
生成されたHTMLは、innerHTMLを使ってDOM要素に書き込むことも、document.write()を使ってDOMに書き込むこともできます。それは完全にあなた次第です。
デフォルトでは、HTML、SVGおよびMathMLを許可していることに注意してください。HTMLのみが必要な場合(これは非常に一般的なユースケースかもしれません)、それも簡単に設定できます:```js
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
### 足を撃ち抜くような落とし穴はありますか?
はい、注意してください。もし _最初に_ HTMLをサニタイズして、その _後に_ 変更を加えると、サニタイズの効果を**簡単に無効化してしまう**可能性があります。サニタイズ後のマークアップを別のライブラリに渡す場合は、そのライブラリが独自にHTMLをいじらないことを必ず確認してください。安全な使用方法や、よく考えてから使うべきタグ・属性については、[Security Goals & Threat Model](https://github.com/cure53/DOMPurify/wiki/Security-Goals-&-Threat-Model) を参照してください。また、後処理やマークアップのコンテキスト変更がなぜサニタイズを無効化するのかについては、[Attack Classes & Bypass History](https://github.com/cure53/DOMPurify/wiki/Attack-Classes-&-Bypass-History) を参照してください。
### わかりました、では次に進みましょう
マークアップをサニタイズした後、`DOMPurify.removed` プロパティを確認して、どの要素や属性が除去されたかを調べることもできます。ただし、このプロパティをセキュリティ上重要な判断に**使用しないでください**。これは好奇心旺盛な方のための小さなヘルパーにすぎません。
### サーバー上でDOMPurifyを実行する
DOMPurifyは技術的にはNode.jsのサーバーサイドでも動作します。私たちのサポートは[Node.jsのリリースサイクル](https://nodejs.org/en/about/previous-releases)に従うよう努めています。
サーバー上でDOMPurifyを実行するにはDOMが必要です。これはおそらく驚くことではないでしょう。通常は[jsdom](https://github.com/jsdom/jsdom)が選択肢の定番であり、_jsdom_ の最新バージョンを使用することを**強くお勧めします**。
なぜでしょうか? 古いバージョンの _jsdom_ は、DOMPurifyが100%正しく動作していてもXSSにつながるようなバグがあることが知られているためです。例えば _jsdom v19.0.0_ には**既知の攻撃ベクトル**があり、それは _jsdom v20.0.0_ で修正されています。そのため、_jsdom_ を最新に保つことを本当にお勧めします。
また、[happy-dom](https://github.com/capricorn86/happy-dom) のようなツールも存在しますが、現時点では**安全とは見なされていません**。DOMPurifyと _happy-dom_ を組み合わせることは現在推奨されておらず、XSSにつながる可能性が高いです。選択するサーバーサイドDOMがなぜ信頼できるコンピューティング基盤の一部となるのかについては、[Attack Classes & Bypass History](https://github.com/cure53/DOMPurify/wiki/Attack-Classes-&-Bypass-History) を参照してください。
それ以外については、サーバー上でDOMPurifyを使用しても問題ありません。おそらく。これは実際には _jsdom_ や、サーバーサイドで利用するDOMに依存します。それが許容できるのであれば、以下のようにして動作させることができます:```bash
npm install dompurify
npm install jsdom
jsdom(最新バージョンを使用してください)の場合、これでうまくいくはずです:```js const createDOMPurify = require('dompurify'); const { JSDOM } = require('jsdom');
const window = new JSDOM('').window; const DOMPurify = createDOMPurify(window); const clean = DOMPurify.sanitize('hello there');
あるいは、インポートを使った作業を好むなら、次のようにもできます:```js
import { JSDOM } from 'jsdom';
import DOMPurify from 'dompurify';
const window = new JSDOM('').window;
const purify = DOMPurify(window);
const clean = purify.sanitize('<b>hello there</b>');
お使いの特定の環境で動作させるのに問題がある場合は、多くの人が直面する問題を解決する素晴らしいプロジェクトである isomorphic-dompurify を検討してみてください。```bash npm install isomorphic-dompurify
I need the input content to translate. Please provide the chunk of Markdown content you'd like me to translate from English to Japanese.```js
import DOMPurify from 'isomorphic-dompurify';
const clean = DOMPurify.sanitize('<s>hello</s>');
デモはありますか?
もちろんデモがあります!DOMPurifyで遊ぶ
セキュリティバグを見つけたらどうすればいいですか?
まず、修正に取り組めるよう、メールで直ちにご連絡ください。PGPキー
また、バグ報奨金の対象となる可能性もあります!Fastmailの素晴らしい方々がDOMPurifyを自社サービスで使用しており、当ライブラリをバグ報奨金の対象範囲に追加しています。そのため、DOMPurifyを回避または弱体化する方法を見つけた場合は、ぜひ彼らのウェブサイトとバグ報奨金情報もご覧ください。