0

Firefox拡張機能では、parseFragmentドキュメント)を使用して、(サードパーティのサーバーから受信した)HTMLの文字列をDocumentFragmentMozillaで必要とされるサニタイズに解析します。唯一の問題は、パーサーが必要なすべての属性(たとえば、class属性)を削除することです。

classHTMLを解析している間、どういうわけか属性を保持することは可能parseFragmentですか?

PS Gecko 14.0で、この関数がサニタイズパラメーターをサポートする別の関数に置き換えられたことを知っています。しかし、Gecko <14.0をどうするか?

4

1 に答える 1

1

いいえ、ホワイトリストはハードコーディングされており、調整できません。ただし、class属性はホワイトリストにあり、保持する必要があります。おそらくstyle属性のことですか? カスタマイズされた動作が必要な場合は、別のソリューションを使用する必要があります ( Firefox 12 で HTML ドキュメントを解析できるDOMParserなど)。

古いバージョンの Firefox に関しては、そこで XHTML データを解析できますDOMParser。実際に HTML を使用している場合、ドキュメントにすぐに挿入せずに HTML を解析する方法 (さまざまなセキュリティ上の問題が発生する可能性があります) を 1 つだけ知っています: range.createContextualFragment()。そのための HTML ドキュメントが必要です。ない場合は、非表示の<iframe>読み込みabout:blankでも同様です。仕組みは次のとおりです。

// Get the HTML document
var doc = document.getElementById("dummyFrame").contentDocument;

// Parse data
var fragment = doc.createRange().createContextualFragment(htmlData);

// Sanitize it
sanitizeData(fragment);

ここでのデータのサニタイズは、あなた自身の責任です。上記でリンクした Mozilla のホワイトリストに基づいてサニタイズを行いたいと思われるかもしれません。そのリストにないすべてのタグと属性を削除し、リンクも確認してください。属性は特殊なケースです。以前は安全ではありませんでしたが、Web でサポートされstyleなくなったため、IMHO は指定されなくなりました。-moz-binding

于 2012-04-17T19:00:17.433 に答える