Не могу заставить работать простой виджет ADsafe - PullRequest
0 голосов
/ 23 августа 2011

Я пытаюсь использовать библиотеку Дугласа Крокфорда 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 ]

3 голосов
/ 24 августа 2011

Насколько я могу судить, ADsafe на самом деле не проверяет ваш код на наличие этих нарушений.Предполагается, что вы будете использовать JSLint с включенными параметрами ADsafe, чтобы проанализировать любой ненадежный JavaScript и убедиться в отсутствии нарушений ADsafe перед его использованием.

Кто угодно, пожалуйста, исправьте меня, если это неправильно.

1 голос
/ 23 августа 2011

Код находится внутри 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>
...