Использование Каха для дезинфекции Javascript? - PullRequest
5 голосов
/ 20 января 2012

Я бы хотел, чтобы пользователи моего приложения могли писать плагины в Javascript, которые расширяют его функциональность, не предоставляя доступ ни к чему, кроме предоставляемого мною объекта API плагина.Например, плагин может выглядеть следующим образом:

plugin.hookSomeUserAction(function() {
    plugin.doSomethingWickedAwesome();
    document.title = 'hacked!'; //shouldn't work
});

Кажется, что Caja должна быть в состоянии выполнить работу, но документация, возможно, худшая из всех проектов с открытым исходным кодом, которые я видела(настоящее достижение!).Мне нужна помощь в настройке системы.

Я заставил cajoler работать в командной строке, и я впихнул один такой плагин в какой-то, возможно, продезинфицированный Javascript.Кодированный Javascript выглядит так, как будто он ожидает, что будет предоставлен объект «IMPORTS___», который должен содержать все материалы, к которым имеет доступ плагин.До сих пор довольно многообещающе!

К сожалению, загрузка этого запущенного файла Javascript фактически превратилась в настоящий беспорядок.Фрагмент исходного кода в документах , к сожалению, совершенно неверен, так как функция loadCaja фактически не отображается нигде в текущем стволе google-caja.Я отследил некоторый код, который, по крайней мере, выполняет что-то :

<div id="plugin"></div>
<script>
    caja.configure({
        cajaServer: "/js/caja"
    }, function(frameGroup) {
        frameGroup.makeES5Frame(document.getElementById('plugin'),
            { /* No network access */ },
            function(frame) {
                frame.url('/js/plugins/test.js')
                    .run({});
            }
        );
    });
</script>

К сожалению, это попытка заставить уговор повторно изменить код JavaScript, который я уже уговорил.Я определенно не заинтересован в том, чтобы сервер повторно уговаривал каждый плагин на каждый запрос;Я просто откажусь от него при загрузке и сохраню его готовым к использованию.

Я также не могу найти никакой документации о том, как и где указывать, что входит в IMPORTS___ (учитывая, что это целая модель безопасности, этокажется странным упущением в документации).Это объект, передаваемый в .run ()?

1 Ответ

0 голосов
/ 07 февраля 2012

Как ни странно, мое единственное знание о Кахе исходит из того, что я прочитал только исходный код SES и не знал контекста его использования. Я обнаружил, что исходный код невероятно хорошо документирован, в отличие от того, какая документация существует или не существует извне.

http://code.google.com/p/es-lab/source/browse/trunk/src/ses/initSES.js

...