7

いずれかのページのFirebugで次の行を実行した場合:

document.documentElement.innerHTML="<script>alert(1)</script>";

alertコマンドが実行されないのはなぜですか?

4

4 に答える 4

6

タグが期待どおりに追加されているようですが、<script>タグ内のコードが実行されていません。(またはのDOM要素を使用しようとすると)同じ失敗が発生します。何らかの理由(おそらく標準への準拠、セキュリティの可能性)のために、を介して追加されたブロック内のインラインコードは実行されません。document.head<script>.innerHTML

ただし、同様の機能を生成する動作するコードがあります。

var script = document.createElement('script');
script[(script.innerText===undefined?"textContent":"innerText")] = 'alert(1);';
document.documentElement.appendChild(script);

<script>ここでは、でブロックを追加し、またはをdocumentElement.appendChild使用してのコンテンツを設定します。textContentinnerText<script>

于 2012-07-27T20:26:38.320 に答える
0

実際に使用することはできますevalが、セキュリティの問題についてはお勧めできません。あなたはこのようなことをすることができます:

var scr = document.createElement('script');
scr.src = 'yourscriptsource';
document.body.appendChild(scr);

それが役に立てば幸い!

于 2012-07-27T20:17:01.507 に答える
0

innerhtmlを使用してhtmlを直接挿入するのではなく、要素を作成して追加することを常にお勧めします。

詳細については、https ://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheetを参照してください。

このフラグメントは機能します:

var newScript = document.createElement( "script" );
newScript.type = 'text/javascript';
var scriptContent = document.createTextNode( "googletag.cmd.push( function() { googletag.display( '" + encodeURIComponent( divID ) + "' ); } );" ); 
newScript.appendChild( scriptContent ); 

実際の例は次のとおりです 。https ://jsfiddle.net/BrianLayman/4nu667c9/

于 2016-06-16T16:27:36.533 に答える
-4

あなたはそれをしません。Firebugで、[コンソール]タブに移動します。そこに直接コードを入力できます。コンソールの下部にある3つの青い山括弧の横にこれを入力し、Enterキーを押します。alert("asdf");

于 2012-07-27T20:23:51.197 に答える