用里面的脚本设置innerHTML [重复]
Posted
技术标签:
【中文标题】用里面的脚本设置innerHTML [重复]【英文标题】:setting innerHTML with a script inside [duplicate] 【发布时间】:2012-07-26 13:19:51 【问题描述】:如果我在任何页面上的 Firebug 中运行以下行:
document.documentElement.innerhtml="<script>alert(1)</script>";
为什么不执行alert
命令?
【问题讨论】:
@11684:HTML5 不需要。 @Rocket 你不知道他用的是哪个浏览器! 哦,等等。 Firebug...这意味着 Mozilla... 这个链接有帮助吗? ***.com/questions/1197575/… 我认为这是为了赢得“你可以在一行代码中容纳多少有问题的 javascript 实践”竞赛。 【参考方案1】:看起来您的<script>
标签正在按您的预期添加,但其中的代码没有被执行。如果您尝试使用 document.head
(或 any 其他 DOM 元素,似乎)也会发生同样的失败。无论出于何种原因(可能符合标准,可能的安全性),通过.innerHTML
添加的<script>
块内的内联代码根本无法运行。
但是,我确实有可以产生类似功能的工作代码:
var script = document.createElement('script');
script[(script.innerText===undefined?"textContent":"innerText")] = 'alert(1);';
document.documentElement.appendChild(script);
在这里,您将<script>
块与documentElement.appendChild
添加并使用textContent
或innerText
设置<script>
的内容。
【讨论】:
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
还能在哪里使用?)。以上是关于用里面的脚本设置innerHTML [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在不删除之前的 innerHTML 的情况下使用 innerHTML? [复制]
使用innerhtml将脚本标签插入到html元素中[重复]
语法中的 innerHTML 错误不起作用;未捕获的 TypeError:无法设置 null 的属性(设置“innerHTML”)[重复]