3

私のアプリケーションは HTML コンテンツを文字列として動的に構築し、完了するとコンテンツが DOM にアタッチされます。ただし、WinJS では、文字列を DOM にアタッチしようとすると例外がスローされます。これらの例外を回避するには、toStaticHTML を介して HTML を実行してサニタイズする必要があります。これは、WinJS と Internet Explorer でグローバルに定義されています。私が抱えている問題は、data-* html5 属性が非常に多く使用されていることです。それらを toStaticHTML で実行すると、それらは削除されます。toStaticHTML が data-* 属性を削除するのはなぜですか? 彼らにとっての本当のセキュリティ上の懸念は何ですか?

jQuery を使用しており、jQuery コードを変更することは許可されていないため、MSApp.execUnsafeLocalFunction で DOM 挿入をラップできないことに注意してください。

var html = "<ul><li data-role='list-node'>My list node</li></ul>";
$('#container').html(toStaticHTML(html));

プロデュース:

<ul>
    <li>My list node</li>
</ul>
4

3 に答える 3

8

これは、HTML のランダムなビットをドキュメントに挿入し、保護されたコンテキスト (WinRT へのフル アクセスを持つアプリ、およびユーザー ドキュメント) 内で安全でないコードを実行できる可能性があるというセキュリティ上の懸念によるものです。

toStaticHtml進化する HTML/Web パターンの場合に「安全」を維持することを目的としているため、ブラックリストではなくホワイトリストです。

ここでの課題を考えると、次のオプションが表示されます。

  • jquery への呼び出しをラップしますmsExecUnsafeLocalFunction(以下を参照)。これは、その呼び出しの存続期間中、すべての Dom 挿入が正常であることを意味します。これには jquery を変更する必要はなく、コードだけを変更する必要があります。
  • Jquery が裏で使用している DOM 呼び出しを完全に書き直して、msExecUnsafeLocalFunction
  • アプリケーションのセキュリティ コンテキストを、ローカル コンテキストではなく Web コンテキストに変更します。もちろん、これにより、WinRT に直接アクセスできなくなります。他のメカニズム (I フレーム間のメッセージングなど) を介して操作する必要があります。
  • WinJS.Binding.TemplateJquery ではなく、コンテンツのレンダリングに使用します。これは、HTML を文字列化するのではなく、ノードを複製します
  • 独自のノード クローンを作成する
  • setAttributeセーフ ノードが挿入された後にアトリビュートを設定します。

msExecUnsafeLocalFunction の使用例:

MSApp.execUnsafeLocalFunction(function() {
    $('#container').html(html);
});
于 2012-09-02T16:41:41.553 に答える
3

data-role-attribute はここにはリストされていません: http://msdn.microsoft.com/en-us/library/windows/apps/hh465388.aspx

これは不明な属性であり、削除されます。

于 2012-09-02T09:53:06.553 に答える
0

ドキュメントでの言及は許可されてdataいません: http://msdn.microsoft.com/en-us/library/windows/apps/hh465388.aspx

于 2012-09-02T10:02:12.630 に答える