JavaScriptで書かれたシンプルなHTMLサニタイザーを探しています。100%XSSで保護されている必要はありません。
私のウェブサイトにMarkdownとWMDMarkdownエディター(githubのSOマスターブランチ)を実装しています。問題は、ライブプレビューに表示されるHTMLが、ここSOのようにフィルタリングされていないことです。プレビューウィンドウのコンテンツをフィルタリングできるように、JavaScriptで記述されたシンプルでクイックなHTMLサニタイザーを探しています。
完全なXSS保護を備えた完全なパーサーは必要ありません。出力をサーバーに送り返していません。結果をデータベースに保存する前に、適切な完全なHTMLサニタイザーを使用するサーバーにMarkdownを送信しています。
グーグルは私には絶対に役に立たない。あらゆる種類のサーバー側言語でユーザー生成HTMLからJavaScriptを除外する方法について、何百もの(多くの場合正しくない)記事が表示されます。
アップデート
これが必要な理由をもう少し詳しく説明します。私のウェブサイトには、StackOverflowにあるものと非常によく似たエディターがあります。MarkDown構文を入力するためのテキスト領域と、その下に、送信後の外観を示すプレビューウィンドウがあります。
ユーザーが何かを送信すると、MarkDown形式でサーバーに送信されます。サーバーはそれをHTMLに変換し、HTMLサニタイザーを実行してHTMLをクリーンアップします。MarkDownは任意のHTMLを許可するので、クリーンアップする必要があります。たとえば、ユーザーは次のように入力します。
<script>alert('Boo!');</script>
それはHTMLなので、MarkDownコンバーターはそれに触れません。HTMLサニタイザーはそれを取り除き、スクリプト要素がなくなります。
しかし、これはプレビューウィンドウで発生することではありません。プレビューウィンドウはMarkDownをHTMLに変換するだけで、サニタイズはしません。したがって、プレビューウィンドウにはスクリプト要素が含まれます。これは、プレビューウィンドウがサーバー上の実際のレンダリングとは異なることを意味します。
これを修正したいので、手っ取り早いJavaScriptHTMLサニタイザーが必要です。基本的な要素/属性のブラックリストとホワイトリストを使用した単純なもので十分です。XSS保護はサーバー側のHTMLサニタイザーによって行われるため、XSSセーフである必要はありません。
これは、プレビューウィンドウが実際のレンダリングと99.99%の確率で一致することを確認するためのものであり、これで十分です。
手伝ってくれますか?前もって感謝します!