2

信頼できないソースから HTML ツリーをダウンロードし、それを使用して、コンテンツを HTML div の子としてページに表示します。ただし、このダウンロードされたコードがスクリプトを実行したり、イベント ハンドラーでスクリプトを実行したりする危険性があります。タグを使用してスクリプトを定義するのと同じように、HTMLで可能ですか?

<noscriptex>
    <script>
        ...
    </script>
</noscriptex>

ブラウザはこのタグ内のコードを実行しませんか?

そのようなものがない場合、ダウンロードした HTML をクリーンアップして、スクリプトを使用せずに CSS で DOM 要素を表示するにはどうすればよいですか?

4

3 に答える 3

1

関数を使用して、マークアップからスクリプトを削除できます。

function stripScripts(markup) {

    var div = document.createElement('div');
    var frag = document.createDocumentFragment();

    div.innerHTML = markup;

    var scripts = div.getElementsByTagName('script');
    var i = scripts.length;

    while (i--) {
      scripts[i].parentNode.removeChild(scripts[i]);
    }

    while (div.firstChild) {
      frag.appendChild(div.firstChild);
    }
    return frag;
}

innerHTML を使用して挿入されたスクリプト要素は実行されないため、安全です。それらはまだDOMにもないため、機能が制限されています。

createDocumentFragmentによって返されるオブジェクトはDOM に直接挿入でき、関数によって返されるフラグメントにはスクリプト要素がないことに注意してください。

于 2012-09-19T04:54:35.623 に答える
1

いいえ; そのような機能はありません。

代わりに、厳密なホワイトリストを使用して、HTML を解析し、認識されていないタグと属性を削除する必要があります。

また、属性値を検証する必要があります。特に URL。

于 2012-09-19T04:03:19.320 に答える
0

これがiframeの目的です。コンテンツがホスト ページとは異なるドメインからのものである場合、他のコンテンツとの通信は許可されません。スクリプトを心ゆくまで実行させることができ、ページのあなたの部分に影響を与えることはできません.

于 2012-09-19T05:52:55.300 に答える