gpt4 book ai didi

javascript - 在 JavaScript 中访问原始全局变量和属性

转载 作者:搜寻专家 更新时间:2023-11-01 04:19:23 26 4
gpt4 key购买 nike

我正在处理注入(inject)网页的代码(使用浏览器插件或脚本标签)。

问题是我们想使用全局对象和变量,如 JSONwindow.locationString.split 等,并且这些的实现可能已被网页更改。这可能会使我们的代码失败,这是一个安全问题。

例子:

>>> String.prototype.split = function() { return 'foo'; };
function()
>>> 'a,b,c'.split(','); // gives unexpected result
"foo"

那么,有没有一种方法可以访问浏览器对对象和函数的默认实现,就像它们被更改之前一样?它不必是标准的,我只希望功能存在。

最佳答案

更新

也许更可行的方法是创建一个空的 <iframe>动态地。

这是一个污染 String.prototype.split 的例子在父窗口中,但从 <iframe> 得到一个干净的窗口.

<html>
<head>
<script type="text/javascript">
function onBodyLoad() {

String.prototype.split = function() { return 'foo'; }; // contaminate original window
console.log(String.prototype.split); // yeah, it's contaminated

var acr = document.getElementById("accessor");
acr.onclick = function ()
{
var dummyFrame = document.createElement("iframe");
document.body.appendChild(dummyFrame);
console.log(dummyFrame.contentWindow.String.prototype.split); // uncontaminated
}
}
</script>
</head>
<body onload="onBodyLoad()">
<a href="#" id="accessor">Access iframe Window object</a>
</body>
</html>

不是一般意义上的;尽管那里可能有一些奇特的黑客攻击。

我能想到的唯一方法是确保您的代码在任何其他脚本之前加载。如果满足该要求,则可以将必要的全局变量克隆到安全位置。

关于javascript - 在 JavaScript 中访问原始全局变量和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10993669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com