2011-01-06 9 views
3

メンバーページシステムを更新しましたが、特定のフィールドに太字、下線、斜体、フォントの色、リンクを許可するのが、ですが、フォントサイズやスタイルはではなく、WYSIWYGエディタで行います。これはもともとtextareaといくつかの最小限のHTMLフィルタリングで行われました。すなわち、preg_replace()<script>を削除します。クレイジーで間違いなく安全ではないことは分かっています。ユーザーがWBCのコードをWYSIWYGで投稿できるようにしますか?

TinyMCEを使用してTinyMCE内の特定のタグを許可しないようにしたのは唯一の問題で、明らかにTinyMCEに依存してXSSに対するHTML入力を確実にすることはできません。 私は過去1時間ほどで特定のプラクティスを読んできましたが、現在のプロファイルを台無しにすることなく特定のHTMLタグ/属性を許可し、フォントサイズなどの他のカスタマイズを許可することは不可能に近いようですインラインスタイルのもの。たとえば、spanタグでフォントの色を許可する必要がありますが、style属性を許可するとCSSの任意の部分も許可されます。

これで、出力にhtmlspecialchars()を安全に適用してから、[b]のBBCodeパーサーで生成されるHTMLを完全に制御できるようになりましたので、BBCodeをWYSIWYGエディターで使用するというアイデアが出ました。 、[u]、[i]、および[color]タグを改行に使用すると、nl2br()となります。

唯一の問題は、現在のHTML設定をBBCodeに変換するために何かをコードする必要があることです。

私の主な質問は、BBCodeが前述のXSS攻撃から保護するのに十分なのでしょうか?あるいは、私が使うことができる、より優雅で明白なHTMLセキュリティの方法がありますか?

答えて

4

あなたはHTML Purifierライブラリを使用することができ(例えばhtmlspecialcharsとして危険なタグは、代わりに盲目的にコンテンツ全体のノードに適用されます)。それは重量ですが、「スタイルタグの色設定のみを許可する」といったルールを許可します。それは徹底的にテストされ、積極的に開発されています。

+0

これは私の興味に関係していますが、これを行う方法の例はどこにありますか? – Dunhamzzz

1
HTMLに

保存し、適切なHTMLパーサを使用する(のようなDOMDocumentは)危険なタグを取り除くために

+0

これは私が最初にしたことですが、ユーザーはフォントの色を変更できますが、スタイル属性に何かを入れることはできません。私はちょうど質問でこれをより明確にしました:) – Dunhamzzz

+0

[DOMAttr](http://php.net/manual/en/class.domattr.php)を使用することはまだ可能です – ajreal

+0

+1しかし、より良いことは包括的です - - 排他的ではありません。 –