Javascript高级关闭

时间:2013-02-03 14:40:56

标签: javascript security function code-injection

我目前正在开发一个项目,在某一点上,您可以将Javascript输入到textarea中,然后运行它。有很多后台代码监控页面并发送到服务器数据。所有这些都是在一个私人功能中,所以不能简单地使用控制台。然后唯一的问题是在textarea中输入的代码是在包含服务器函数的私有函数内部进行评估的,从而使它可以访问该站点的内部。我如何隔离它并使它的范围超出私有功能?一个例子如下:

<script>

var x = 2;
(function(){
    var x = 10;
    var elem = document.createElement('button');
    elem.addEventListener('click',function(){
        alert(x);
    });
    document.body.appendChild(elem);
})();

</script>

在这个例子中,当按下按钮时,我希望x返回2而不是10。因此迫使它像在全球范围内那样运行。

修改

我已经尝试将该功能绑定到窗口,这似乎是在正确的路径上,但没有我想要的效果。

<script>

var x = 2;
(function(){
    var x = 10;
    var elem = document.createElement('button');
    elem.addEventListener('click',(function(){
        alert(x);
    }).bind(window));
    document.body.appendChild(elem);
})();

</script>

我也尝试将窗口应用到该函数,但是唉也没有用。

2 个答案:

答案 0 :(得分:0)

已修改版本更改提醒(x)中提醒( .x)。 它能解决你的问题吗?

答案 1 :(得分:0)

事实证明,答案比我简单得多。全局范围内但在闭合函数之外的函数可以由任何函数调用,但它只能访问全局范围中的变量。因此,下面的例子非常有效。

<script>

var run = function(){alert(x);};
var x = 2;
(function(){
    var x = 10;
    var elem = document.createElement('button');
    elem.addEventListener('click',run);
    document.body.appendChild(elem);
})();

</script>