クライアントのサイトにCKeditorをインストールして、WYSIYGエディターを使用してテキストを入力できるようにしました。ほとんどの部分がロックされており、太字、斜体、順序なしのリストなどのみが許可されます。
また、ユーザーが送信したHTMLをHTMLピューリファイアで実行して、ユーザーが賢くならないようにし、たとえばテーブルの追加を試みます。たとえば、XSSの懸念事項に対して入力できる内容を制限することもお勧めします。
CKeditor / HTML Purifierコンボによって生成された出力の一部を見て、この残虐行為を見ました...
<p>
<span style="font-size:11px;"><br /></span></p>
とにかく、HTML Purifierを構成したり、他の何かを使用してテキストノードのない要素を削除したりできますか?明らかに、最新の子孫から開始してからDOMツリーを実行し、テキストノードを持つ要素を持たない最も親を削除する必要があります。
そのマークアップにプレゼンテーションのみの要素がないことを前提として、このアプローチのエッジケースはありますか?私が考えることができる自己閉鎖要素はありません(たとえば、画像、入力要素など)。