用里面的脚本设置innerHTML

时间:2012-07-27 20:07:37

标签: javascript firebug innerhtml

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

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

为什么不执行alert命令?

4 个答案:

答案 0 :(得分:5)

您的<script>标记 似乎正在按预期添加,但其中的代码未被执行。如果您尝试使用document.head(或任何其他DOM元素,似乎)会发生同样的故障。无论出于何种原因(可能符合标准,可能的安全性),通过<script>添加的.innerHTML块内的内联代码根本无法运行。

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

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

在此,您使用<script>添加documentElement.appendChild阻止,并使用textContentinnerText设置<script>的内容。

答案 1 :(得分:0)

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

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

希望它有所帮助!

答案 2 :(得分: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/

答案 3 :(得分:-4)

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