1

クライアントのサイトにCKeditorをインストールして、WYSIYGエディターを使用してテキストを入力できるようにしました。ほとんどの部分がロックされており、太字、斜体、順序なしのリストなどのみが許可されます。

また、ユーザーが送信したHTMLをHTMLピューリファイアで実行して、ユーザーが賢くならないようにし、たとえばテーブルの追加を試みます。たとえば、XSSの懸念事項に対して入力できる内容を制限することもお勧めします。

CKeditor / HTML Purifierコンボによって生成された出力の一部を見て、この残虐行為を見ました...

<p>
    <span style="font-size:11px;"><br /></span></p>

とにかく、HTML Purifierを構成したり、他の何かを使用してテキストノードのない要素を削除したりできますか?明らかに、最新の子孫から開始してからDOMツリーを実行し、テキストノードを持つ要素を持たない最も親を削除する必要があります。

そのマークアップにプレゼンテーションのみの要素がないことを前提として、このアプローチのエッジケースはありますか?私が考えることができる自己閉鎖要素はありません(たとえば、画像、入力要素など)。

4

1 に答える 1

0

PHPのstrip_tags()関数を使用できます:

http://php.net/manual/en/function.strip-tags.php

これにより、2 番目のパラメーターとして入力したものを除くすべての html タグが削除されます。あなたの場合、太字、斜体、および順序なしのリストのみを許可するには、次のようにします。

$text = strip_tags($text, '<b><i><ul>');

span確かに、この後も空のものが存在する可能性がありますが、これでandpタグを確実に取り除くことができます。

于 2010-08-10T08:44:20.353 に答える