无法让简单的ADsafe小部件工作

时间:2011-08-23 14:11:30

标签: javascript sandbox

我正在尝试使用Douglas Crockford的ADsafe库。 我认为它应该限制可以使用的JavaScript,但它似乎允许危险的调用,例如eval()

以下是沙箱不限制任何内容的示例:

<html>
<head>
<title>ADsafe Widget Template</title>
</head>
<body>
    <script src="adsafe.js"></script>

    <div id="WIDGET_">
    <script>
        ADSAFE.go("WIDGET_", function (dom, lib) {
            "use strict";

            // 
            // ADsafe is allowing these to execute!!
            // 
            window.alert("window.alert is working :(");
            eval('window.alert("hello from eval")');
            window.location = "http://www.google.com";
        });
    </script>
    </div>
</body>
</html>

有人知道ADsafe沙箱应该如何工作吗?

2 个答案:

答案 0 :(得分:3)

据我所知,ADsafe实际上并未检查您的代码是否存在这些违规行为。在使用ADsafe选项之前,您需要使用JSLint来解析任何不受信任的JavaScript并验证没有ADsafe违规。

任何人,如果这是错误的,请纠正我。

答案 1 :(得分:1)

代码在div内,因此代码在div完全加载之前执行,在这种情况下显然不起作用。在div工作之外和之后移动脚本:http://jsfiddle.net/pimvdb/dFQQa/

<html>
<head>
<title>ADsafe Widget Template</title>
</head>
<body>
    <script src="adsafe.js"></script>

    <div id="WIDGET_"></div>

    <!-- div has been ended and fully loadede by now -->

    <script>
        ADSAFE.go("WIDGET_", function (dom, lib) {
            "use strict";

            // 
            // ADsafe is allowing these to execute!!
            // 
            window.alert("window alert is working :(");
            eval('window.alert("hello from eval")');
            window.location = "http://www.google.com";
        });
    </script>
</body>
</html>