如果我在 Firebug 中的任何页面上运行以下行:
document.documentElement.innerHTML="<script>alert(1)</script>";
为什么alert
命令没有执行?
如果我在 Firebug 中的任何页面上运行以下行:
document.documentElement.innerHTML="<script>alert(1)</script>";
为什么alert
命令没有执行?
它看起来像你的<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>
.
实际上您可以使用,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 );
你不要那样做。在 Firebug 中,转到“控制台”选项卡。您可以直接在那里输入代码。在控制台底部的三个蓝色尖括号旁边键入以下内容,然后按 Enter 键:alert("asdf");