私はstackoverflowでここのようなコメントシステムを書いていますが、出力する前にユーザーコンテンツをサニタイズする最良の方法がわかりません.
データベースに挿入する前にコンテンツをサニタイズすると、今後発生する可能性のあるあらゆる種類の問題を考えることができるため、ページに出力するときにコンテンツをサニタイズしたいと本当に思っています。
これまで、私は常にユーザー コンテンツを実行するだけでした。
htmlentities($content, ENT_QUOTES, 'UTF-8')
私が理解していることから、出力しても安全です。
ただし、コメント システムに使用している WYSIWYG エディターでは、次の HTML タグを書式設定に使用できます。
<code><span><div><label><a><br><p><b><i><del><strike><u><img><video><audio><iframe><object><embed><param><blockquote><mark><cite><small><ul><ol><li><hr><dl><dt><dd><sup><sub><big><pre><code><figure><figcaption><strong><em><table><tr><td><th><tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>
したがって、コメントを正しく表示するには、タグをエンコードするのではなく、それらのタグを出力できる必要があります。
私が使用している WYSIWYG エディター (Redactor) のドキュメントではstrip_tags()
、許可されたタグ引数として上記のタグを渡し、ユーザー コンテンツを で実行することを推奨しています。ただし、stackoverflow で読んだ質問と回答では、これでは不十分である可能性があることが示唆されています。
仮定の下で動作するのstrip_tags()
は十分ではありません。私は代替案を検討しており、最も評価の高いオプションの 1 つは HTML Purifier のようです。ただし、ここで質問と回答を読み続けて、HTML Purifier が非常に遅いことを示唆しています。
コメントがレンダリングされる方法のため、各コメントは個別に精製する必要があります (すべてを 1 つの文字列として処理することはできません)。スレッド内の数十または数百のコメント。
概要:
- HTML Purifier は、このタイプのコメント システムには遅すぎますか?
- より良い代替手段はありますか?
- スタックオーバーフローはこれをどのように処理しますか?