AIイノベーションズ

DOMPurify vs sanitize-html 比較してみた。XSS対策にどっちを選べば良いのか

XSS対策のためのJavaScriptライブラリ「DOMPurify」と「sanitize-html」を比較。それぞれの特徴(想定利用シーン、目的、開発者、メンテ状況)を解説し、どちらを選ぶべきか考察します。将来的なSanitizer APIにも言及。

sanitize-html と DOMPurify はどちらもXSS対策に使えるライブラリです。

通常、どちらを使うべきなのでしょうか?

DOMPurifyのGitHub

sanitize-htmlのGitHub

結論: DOMPurifyを使うべき

結論、sanitize-htmlを選ぶべき理由はほとんどありません。

DOMPurifyのほうが良いです(比較してすごく良いというわけでもありませんが)。

なぜなら、

  • より軽い
  • よりセキュア(と期待できる開発者)
  • XSS対策が目的
  • よくメンテナンスされている
  • GitHubスター数が3倍ほど多い

だからです。

上記のことはGitHubを見ればわかります。

もちろん、プロジェクトによって要件は大きく異なるので一択とまでは言えませんが、少なくともとりあえずXSS対策したいという場合にはDOMPurifyを選択すれば良いと思います。

以下より、それぞれの特徴について詳しく説明します。

DOM Purifyの特徴

DOMPurifyはテキストの出力時にクライアントのJavaScriptで利用されることを前提としています。

ただし、Node.jsでも利用できます。

その目的はXSS対策です。

セキュリティの専門家が開発に参加しているということで信頼感があります。

DOMPurify は、Web 攻撃と XSS に豊富な経験を持つセキュリティ担当者によって作成されました。

DOMPurifyのGitHub

sanitize-htmlの特徴

sanitize-htmlはテキストの保存時に**サーバーサイドのJavaScript(Node.js)**で利用されることを前提としています。

ただし、クライアントのJavaScriptでも利用できます。

その目的はHTMLをクリーンアップすることです。

もちろんXSS対策にも利用できますし、そのように利用されているケースもあります。

しかし、基本的にはXSS対策というよりも、保存されるHTMLをクリーンにしておきたい場合が主な想定されるユースケースのようです。

HTMLサニタイズのルールを厳格にカスタマイズできるようなので良いとか。ただ、そういうカスタマイズはDOMPurifyでも出来ますので、sanitize-htmlの独自の価値はそこまで無いように思われます。

まとめ

つまり、XSS対策目的でセキュリティ専門家によって開発されているのがDOMPurifyなのでDOMPurifyを使いましょうということでした。

おまけ:HTML Sanitizer API

Sanitizer APIというブラウザのAPIが実験的に開発されており、将来的にはこれで良くなる可能性が高いです。

まだほとんどのブラウザでフルに使えませんが、これが完全にリリースされて全てのブラウザが対応したらこれがスタンダードになるでしょう。

「とりあえず出力時にはこれを使っとけ」的な存在になりそうですね。

On this page