Комментарии 25
Use habracut, Luke!
-3
Исправьте на Мы не хотим, чтобы пользовательские скрипты не делали ничего плохого
0
(function () {
var a = 0;
try {
throw 1;
} catch (a) {
}
alert(a); // alerts 1 on IE 6 and 7 (IE 8 not tested)
})();
Я вот не совсем понял — это баг? По мне так вполне нормальный код: Человек обьявил переменную, а потом ей присвоил обьект исключения. Что удивительного?
Почему себя браузеры ведут по разному — другой вопрос.
var a = 0;
try {
throw 1;
} catch (a) {
}
alert(a); // alerts 1 on IE 6 and 7 (IE 8 not tested)
})();
Я вот не совсем понял — это баг? По мне так вполне нормальный код: Человек обьявил переменную, а потом ей присвоил обьект исключения. Что удивительного?
Почему себя браузеры ведут по разному — другой вопрос.
0
Данный баг позволяет изменить неявным способом глобальную переменную в IE <= 8. В примере переменная «а» подменяется на 1, но по стандарту переменная «а» должна быть локальной для блока catch (a) {}
0
Начнем с того что в примере а не глобальная. А с другой стороны на сколько я знаю в JS нет разделения на блоки, как например, в C#. Можно ссылочку на инфу о стандарте этом? Интересно.
+1
es5.github.com/#x12.14 чуть ниже «The production Catch» см. пункт 3 и ниже.
Let catchEnv be the result of calling NewDeclarativeEnvironment passing oldEnv as the argumentт.е. создаем свой «catchEnv» основываясь на «oldEnv»
0
Вы уж извините, но гитхабу я не верю, я и сам туда могу залить все что угодно.
0
Поверьте тогда оригиналу (pdf, 2.5Мб) параграф 12.14 (конец 96й страницы)
+1
зато есть область видимости функции. в данном примере а — локальная для анонимной функции, и как я понял через этот баг можно заменить глобально определенную а.
0
Может просто задача стоит неверно? Зачем такое может понадобиться?
0
Я использую другой подход, пользователь пишет свои плагины на псевдокоде с синтаксисом javascript и неким своим апи, а потом код транслируется в нормальный js и исполняется. Имхо, самое оптимальное.
0
Псевдокод проблематично отлаживать лучше уж использовать ADsafe
0
а зачем удалять «оператор [], Date и Math.random»?
0
Оператор [] плох тем, что в него можно передать переменную -> затруднен статический анализ.
[ ] subscript operator except when the subscript is a positive numeric literal or string literal.А свободный доступ к Date и Math.random опасен тем, что виджеты могут их переписать -> изменить логику других виджетов.
— Lookup of dynamic properties could provide access to the restricted members. Use the ADSAFE.get and ADSAFE.set methods instead.
— Access to these sources of non-determinism is restricted in order to make it easier to determine how widgets behave.
0
Но ведь так само можно переписать String, Array, Number, etc.
0
Они глобальные переменные — блокируются в первую очередь. Хотя и Date и Math.random тоже глобалы — не могу знать почему Крокфорд вынес их отдельно.
Если включить в JsLint «Safe Subset» и «ADsafe» то любое обращение к ним блокируется.
Если включить в JsLint «Safe Subset» и «ADsafe» то любое обращение к ним блокируется.
0
понятно. а как создать массив, если нельзя использовать ни
new Array
ни []
?0
Квадратные скобки могут означать как литерал, порождающий массив так и оператор скобочного доступа к свойству объекта. Вот в случае скобочного доступа он запрещен, кроме массивов.
Данный код проходит валидацию без ошибок с флагами
Данный код проходит валидацию без ошибок с флагами
/*jslint adsafe: true, safe: true, fragment: true, maxerr: 50, indent: 4 */
:<div id="SUDOKU_">
<script>
ADSAFE.id("SUDOKU_");
</script>
<script>
ADSAFE.go('SUDOKU_', function (dom, lib) {
"use strict";
var a = [1, 2, 3, 4],
b = 'join';
a[1] = 100; // Ok
a.map(function () {
return 4;
}); // Ok
a[b](); // Error
});
</script>
0
НЛО прилетело и опубликовало эту надпись здесь
Это не в публичной части сайта к сожалению, используется в качестве макросов в системе коллективной разработке для автоматизации ряда задач. Вот пример псевдокода который добавляет в интерфейсе кнопки скачки для всех непустых папок в дереве:
Да, кстати, этот код ничего совсем не меняет. Код создает задачу, а уже задача исполняется централизованно специальным процессором, который проверяет права и прочее при исполнении действий, это второй уровень безопасности. Потому что программисту например может быть запрещено вносить изменения в данные, но можно работать с интерфейсом. Данный код плох тем, что тут разрешений почти нет, можно было сделать проще добавив поле в модель данных, тогда при каждом добавлении файла допустим к нему поле само бы приписывалось, а так код исполняется при каждом обновлении, ну может потом кто-то перепишет, это двумя строчками делается.
Так вообще апи предоставляет возможность обращения к модели данных, другим макросам, страницам, данным, пользователям, процессам в системе (можно перезапускать веб-сервер допустим и тд), файлам и некоторым системным переменным и функциям. На любые объекты и даже на отдельные их методы и поля можно повесить разрешения. Так что вполне хватает этого для задач насущных.
JavaScript итоговый не привожу, там жесть полная… красиво сделать не получилось.
var filesTree = data.getCollection("files", true);
var interface = pages.getPage("svn_tree").interface;
filesTree.asList().foreach(function (item, i) {
if (item.isFolder && item.childs.length) {
item.set("zipped", sys.command("return sys.zip(item.path, md5(item.path)).path"));
interface.append("action.download", "data.svn_tree.item.actions", "item.zipped");
}
});
sys.export(filesTree);
sys.export(interface);
Да, кстати, этот код ничего совсем не меняет. Код создает задачу, а уже задача исполняется централизованно специальным процессором, который проверяет права и прочее при исполнении действий, это второй уровень безопасности. Потому что программисту например может быть запрещено вносить изменения в данные, но можно работать с интерфейсом. Данный код плох тем, что тут разрешений почти нет, можно было сделать проще добавив поле в модель данных, тогда при каждом добавлении файла допустим к нему поле само бы приписывалось, а так код исполняется при каждом обновлении, ну может потом кто-то перепишет, это двумя строчками делается.
Так вообще апи предоставляет возможность обращения к модели данных, другим макросам, страницам, данным, пользователям, процессам в системе (можно перезапускать веб-сервер допустим и тд), файлам и некоторым системным переменным и функциям. На любые объекты и даже на отдельные их методы и поля можно повесить разрешения. Так что вполне хватает этого для задач насущных.
JavaScript итоговый не привожу, там жесть полная… красиво сделать не получилось.
+1
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Запускаем сторонний код в песочнице