2

ユーザーが入力したマークアップをサニタイズ/標準化するために、PHPの「XSSから保護し、標準に準拠した出力を保証するフィルター」である HTML Purifierを使用しています。

これは、ユーザーが入力したマークアップの例です。

<font face="'Times New Roman', Times">TEST</font>

これは以下を生成します:

<span style="font-family:&quot;Times New Roman&quot;, Times;">TEST</span>

&quot一重引用符のエスケープ文字でさえないので、私は少し混乱しています。このユーザー生成コンテンツを後で使用するので、ここでのベスト プラクティスは何ですか?

  • そのまま放置
  • purifier の実行後にすべて&quotを置き換えます\'
  • HTML Purifier を別の方法で構成する
  • 他の何か?
4

2 に答える 2

2

私には問題ないように見えます。

一重引用符から二重引用符への変換は、HTML purifier がタグ全体を分解し、style属性内のものを引用するときにたまたま二重引用符を使用する独自のルールに従って元に戻すという事実から来ていると思います。

また、私にとっても問題ありません。どのDoctypeに対して検証していますか?

私が何かを見落としていなければ、これはそのまま使用しても問題ないと思います。

于 2010-09-05T09:27:01.300 に答える
1

出力は XHTML で有効ですが、エンティティの変換が間違っています。<img src="/test" alt="I'm ok"/>に変換されます<img src="/test" alt="I&quot;m ok">

シンプルで十分です:

$allowed_tags='<font>';
echo htmlspecialchars(strip_tags(rawurldecode($input),$allowed_tags),ENT_COMPAT,'UTF-8');

<font> タグを <span> に変換しません。

于 2010-09-05T09:44:58.390 に答える