Как передавать библиотеки через Google CAJA?

Кто-нибудь знает, могу ли я настроить Google Caja, чтобы он позволял некоторым точным библиотекам работать и не подвергался дезинфекции? У меня есть собственный сервер CAJA и приложение на основе NodeJS. Я передаю код пользователей Google CAJA, который в основном будет связан с диаграммами и графиками, но все функции библиотек (например, d3js, chart.js) заблокированы CAJA. Все библиотеки проходят через Caja и подключаются к документу пользователя без ошибок, но если пользователи запрашивают какую-либо функцию библиотеки (например, d3.select("body").append("svg")), то она показывает ошибки, например this * is not a function. Кто-нибудь знает какой-нибудь метод?

PS Я знаю о политике URI, но кажется, что она просто контролирует все, что исходит из доменных имен одного и того же происхождения, даже если библиотека передается через uriPolicy, она все еще проверяется Caja.


person kimslava93    schedule 08.09.2016    source источник
comment
Вы видели смягчающий атрибут uriPolicy?   -  person tapananand    schedule 23.03.2017
comment
Привет! Да, нашел, но, к сожалению, не смог заставить работать. Я не смог найти для него никакой документации, я нашел ее в исходном коде самого caja. Буду очень благодарен, если у вас есть информация о том, как это работает.   -  person kimslava93    schedule 24.03.2017


Ответы (1)


Вы можете вернуть URL-адрес предварительно смягченной / предварительно уговоренной / доверенной версии библиотеки с помощью функции uriPolicy.mitigate. Вы можете просто проверить URL-адрес библиотеки, и если он совпадает, вы вернете предварительно настроенный URL-адрес, иначе вы вернете ноль. Например:

var uriPolicy = {
    mitigate: function(uri) {
        if(/jquery\.js/.test(uri))
            return urlToMyJquery.js;
        else
            return null;
    }
}
person tapananand    schedule 25.03.2017
comment
Спасибо, а что, если я хочу подключить что-то не из списка предварительно доверенных? Например D3.js. Как мне получить его из собственного хранилища? - person kimslava93; 27.03.2017
comment
Вы можете в основном вернуть URL-адрес любого ресурса, независимо от того, смягчен он или нет. Несмотря на то, что один из них может открыть ваше приложение для угроз безопасности, будьте очень осторожны. - person tapananand; 27.03.2017