sanitize-html
と DOMPurify
はどちらもXSS対策に使えるライブラリです。
通常、どちらを使うべきなのでしょうか?
【目次】
結論: DOMPurifyを使うべき
結論、sanitize-htmlを選ぶべき理由はほとんどありません。
DOMPurifyのほうが良いです(比較してすごく良いというわけでもありませんが)。
なぜなら、
- より軽い
- よりセキュア(と期待できる開発者)
- XSS対策が目的
- よくメンテナンスされている
- GitHubスター数が3倍ほど多い
だからです。
上記のことはGitHubを見ればわかります。
もちろん、プロジェクトによって要件は大きく異なるので一択とまでは言えませんが、少なくともとりあえずXSS対策したいという場合にはDOMPurifyを選択すれば良いと思います。
以下より、それぞれの特徴について詳しく説明します。
DOM Purifyの特徴
DOMPurifyはテキストの出力時にクライアントのJavaScriptで利用されることを前提としています。
ただし、Node.jsでも利用できます。
その目的はXSS対策です。
セキュリティの専門家が開発に参加しているということで信頼感があります。
DOMPurify は、Web 攻撃と XSS に豊富な経験を持つセキュリティ担当者によって作成されました。
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が実験的に開発されており、将来的にはこれで良くなる可能性が高いです。
まだほとんどのブラウザでフルに使えませんが、これが完全にリリースされて全てのブラウザが対応したらこれがスタンダードになるでしょう。
「とりあえず出力時にはこれを使っとけ」的な存在になりそうですね。