Mar*_*ans 5 javascript security global-variables
我正在研究注入网页的代码(使用浏览器插件或脚本标签).
问题是,我们要使用全局对象和变量,如JSON,window.location,String.split,等,以及这些的实现可能已经被网页更改.这可能会使我们的代码失败,这是一个安全问题.
例:
>>> String.prototype.split = function() { return 'foo'; };
function()
>>> 'a,b,c'.split(','); // gives unexpected result
"foo"
Run Code Online (Sandbox Code Playgroud)
那么,是否有办法访问浏览器的默认实现对象和函数,就像它们被更改之前一样?它不一定是标准的,我只是希望功能存在.
也许更可行的方法是<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>
Run Code Online (Sandbox Code Playgroud)
不是一般意义上的;尽管可能存在一些奇特的黑客。
我能想到的唯一方法是确保您的代码在任何其他脚本之前加载。如果满足该要求,则可以将必要的全局变量克隆到安全位置。
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |