【问题标题】:setting innerHTML with a script inside [duplicate]用里面的脚本设置innerHTML [重复]
【发布时间】:2012-07-26 13:19:51
【问题描述】:

如果我在任何页面上的 Firebug 中运行以下行:

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

为什么不执行alert 命令?

【问题讨论】:

  • @11684:HTML5 不需要。
  • @Rocket 你不知道他用的是哪个浏览器!
  • 哦,等等。 Firebug...这意味着 Mozilla...
  • 这个链接有帮助吗? stackoverflow.com/questions/1197575/…
  • 我认为这是为了赢得“你可以在一行代码中容纳多少有问题的 JavaScript 实践”竞赛。

标签: javascript firebug innerhtml


【解决方案1】:

看起来您的&lt;script&gt; 标签正在按您的预期添加,但其中的代码没有被执行。如果您尝试使用 document.head(或 any 其他 DOM 元素,似乎)也会发生同样的失败。无论出于何种原因(可能符合标准,可能的安全性),通过.innerHTML 添加的&lt;script&gt; 块内的内联代码根本无法运行。

但是,我确实有可以产生类似功能的工作代码:

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

在这里,您将&lt;script&gt; 块与documentElement.appendChild 添加并使用textContentinnerText 设置&lt;script&gt; 的内容。

【讨论】:

  • eval() 的不错替代品。
【解决方案2】:

实际上您可以使用eval,但这不是解决安全问题的好习惯。你可以这样做:

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

希望对你有帮助!

【讨论】:

    【解决方案3】:

    最好使用创建元素并附加它们,而不是使用 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/

    【讨论】:

      【解决方案4】:

      你不要那样做。在 Firebug 中,转到“控制台”选项卡。您可以直接在此处输入代码。在控制台底部的三个蓝色尖括号旁边键入此内容,然后按 Enter 键:alert("asdf");

      【讨论】:

      • OP 正在尝试诊断为什么这行代码不能按预期工作。几乎可以肯定,OP已经在使用 Firebug 控制台(除了控制台之外,run the following line in Firebug 还能在哪里使用?)。
      猜你喜欢
      • 1970-01-01
      • 2018-11-19
      • 2015-06-29
      • 2012-06-25
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 2012-05-22
      相关资源
      最近更新 更多