使用脚本设置innerHTML

IT技术 javascript firebug innerhtml
2021-03-14 20:50:14

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

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

为什么alert命令没有执行?

4个回答

它看起来像你的<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>.

很好的替代品eval()
2021-04-22 20:50:14

实际上您可以使用,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 中,转到“控制台”选项卡。您可以直接在那里输入代码。在控制台底部的三个蓝色尖括号旁边键入以下内容,然后按 Enter 键:alert("asdf");

OP 正试图诊断为什么这行代码没有按预期工作。OP 几乎可以肯定已经在使用 Firebug 控制台(run the following line in Firebug除了控制台,他还能在哪里?)。
2021-04-21 20:50:14