Firefoxアドオンサイト(FirefoxアドオンSDK 1.10に基づく)への最近の提出は、使用する入力をサニタイズしておらず、使用するように提案されたため、拒否されましたnsIParserUtils
。
parseHTML(doc, html, allowStyle, baseURI, isXML)
そのページで関数を見つけました。私はそれを次のように変更しました:
function parseHTML(doc, html, allowStyle, baseURI, isXML) {
var parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
var f = parser.parseFragment(html, allowStyle ? parser.SanitizerAllowStyle : 0,
!!isXML, baseURI, doc);
return f;
}
そして、その最初のパラメータはドキュメント要素であると言われています。私はそれが何であるかわかりませんか?試しdocument.createDocumentFragment()
ましたが、「ReferenceError:ドキュメントが定義されていません」というエラーが表示されます。この関数を呼び出す方法について誰かが私を助けることができますか?
そして、関数はを返しますnsIDOMDocumentFragment
。それを文字列に戻す方法は?
アップデート:
@ zer0によって提案されたように、私は使用しました:
var parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
var sanitizedHTML = parser.sanitize(html, flags);
しかし、それは私がやりたかったことの目的を打ち破ります。例えば:
<html><head><BASE href='http://localhost/t/h.html' />
<link rel="stylesheet" type="text/css" href="h.css">
<style type="text/css">
.b{
color:green;
}
</style>
<base href="http://foo.example.com/">
</head><body>Sample Text. No Style
<script>Hello malicious code</script>
<p class="a">External Style</p>
<p class="b">Internal Style</p>
<p style="color:blue">Inline Style</p>
<a href="sample.html">Link</a><br><br><div style='color: #666666; font-size: 12px'>Clipped on 6-October-2012, 07:37:39 PM from <a href='http://localhost/t/h.html'>http://localhost/t/h.html</a> </div></body></html>
に変換されます:
<html><head>
<style type="text/css">
.b{
color:green;
}
</style>
</head><body>Sample Text. No Style
<p class="a">External Style</p>
<p class="b">Internal Style</p>
<p style="color:blue">Inline Style</p>
<a>Link</a><br><br><div style="color: #666666; font-size: 12px">Clipped on 6-October-2012, 07:37:39 PM from <a href="http://localhost/t/h.html">http://localhost/t/h.html</a> </div></body></html>
これにより、外部ハイパーリンクとCSSが削除されるため、アドオン自体の目的が無効になります。私が欲しいのは、スクリプトだけを削除することです。
<html><head><BASE href='http://localhost/t/h.html' /> <BASE href='http://localhost/t/h.html' />
<link rel="stylesheet" type="text/css" href="h.css">
<style type="text/css">
.b{
color:green;
}
</style>
<base href="http://foo.example.com/">
</head><body>Sample Text. No Style
<p class="a">External Style</p>
<p class="b">Internal Style</p>
<p style="color:blue">Inline Style</p>
<a href="sample.html">Link</a><br><br><div style='color: #666666; font-size: 12px'>Clipped on 6-October-2012, 07:37:39 PM from <a href='http://localhost/t/h.html'>http://localhost/t/h.html</a> </div></body></html>
誰かがこれに光を当てることができますか?