いずれかのページのFirebugで次の行を実行した場合:
document.documentElement.innerHTML="<script>alert(1)</script>";
alert
コマンドが実行されないのはなぜですか?
いずれかのページのFirebugで次の行を実行した場合:
document.documentElement.innerHTML="<script>alert(1)</script>";
alert
コマンドが実行されないのはなぜですか?
タグが期待どおりに追加されているようですが、<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
使用してのコンテンツを設定します。textContent
innerText
<script>
実際に使用することはできますeval
が、セキュリティの問題についてはお勧めできません。あなたはこのようなことをすることができます:
var scr = document.createElement('script');
scr.src = 'yourscriptsource';
document.body.appendChild(scr);
それが役に立てば幸い!
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/
あなたはそれをしません。Firebugで、[コンソール]タブに移動します。そこに直接コードを入力できます。コンソールの下部にある3つの青い山括弧の横にこれを入力し、Enterキーを押します。alert("asdf");