如果我在任何页面上的Firebug中运行以下行:
document.documentElement.innerHTML="<script>alert(1)</script>";
为什么不执行alert
命令?
答案 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
阻止,并使用textContent
或innerText
设置<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");