メンバーページシステムを更新しています。要件の1つは、太字、下線、斜体、フォントの色、および特定のフィールドへのリンクを許可することですが、フォントのサイズやスタイルは許可しません。これらはすべてWYSIWYGエディターを使用します。これは元々、テキストエリアといくつかの最小限のHTMLフィルタリング、つまり。で削除することで行われ<script>
ましたpreg_replace()
。私が知っているクレイジーで間違いなく危険です。
私の最初の改訂は、TinyMCEを使用し、TinyMCE内の特定のタグを禁止することでした。唯一の問題は、TinyMCEをあらゆる種類のバリデーターとして信頼できないことであり、発見したXSSに対してHTML入力を保護することは絶対的な地雷原です。私はこの1時間ほど特定のプラクティスを読んでいますが、現在のプロファイルを台無しにすることなく特定のHTMLタグ/属性を許可し、さらにフォントサイズやフォントサイズなどの他のカスタマイズを許可することはほぼ不可能になりそうです。インラインスタイルのもの。たとえば、スパンタグでフォントの色を許可する必要がありますが、style属性を許可すると、CSSの任意の部分も許可されます。
私は今、WYSIWYGエディターでBBCodeを使用するというアイデアに取り組んでいます。これによりhtmlspecialchars()
、出力に安全に適用し、[b]、[u]、のBBCodeパーサーで生成されるHTMLを完全に制御できるようになります。 [i]、および[color]タグはnl2br()
改行用です。
唯一の問題は、現在のHTML設定をBBCodeに変換するために何かをコーディングする必要があることです。
私の主な質問は、BBCodeを使用した前述の手順でXSS攻撃から保護するのに十分かどうかです。それとも、私が使用できるHTMLセキュリティのより優雅で明白な方法はありますか?