私は Markdown を使用して、フォーラム スクリプトでユーザーに投稿を書き込む簡単な方法を提供しています。
すべてのユーザー入力をサニタイズしようとしていますが、Markdown の入力に問題があります。
ユーザーは投稿を編集できるため、HTML に変換されたバージョンではなく、マークダウン テキストをデータベースに保存する必要があります。
基本的に、StackOverflow のようなものが必要です。
Markdown の XSS 脆弱性に関するこの記事を読みました。そして、私が見つけた唯一の解決策は、スクリプトが提供するすべての出力の前に HTML_purifier を使用することです。
これによりスクリプトが遅くなる可能性があると思います.20の投稿が出力され、それぞれに対してHTML_purifierが実行されると思います...
そのため、出力ではなく入力をサニタイズする XSS 脆弱性からサニタイズするためのソリューションを見つけようとしていました。
テキストが HTML ではなく Markdown であるため、入力に対して HTML_purifier を実行できません。HTML を取得するために変換すると、Markdown に変換することはできません。
私はすでにすべてのHTMLコードを削除しています(願っています):
htmlspecialchars(strip_tags($text));
私は別の解決策について考えました:
ユーザーが新しい投稿を送信しようとしている場合: 入力を Markdown から HTML に変換し、HTML_purifier を実行します。XSS インジェクションが見つかった場合は、単純にエラーを返します。しかし、これを作成する方法も、HTML_purifier で許可されているかどうかもわかりません。
そこで同じ問題について多くの質問を見つけましたが、すべての解決策は入力を HTML として保存することでした。Markdownとして保存する必要があります。
誰かアドバイスはありますか?