2013-10-15 3 views
2

Я строю систему CMS, и я хочу ограничить сторонний javascript, который включает в себя возможность встраивания пользователей на свой сайт.Ограничить сторонние скрипты - Google Caja?

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

  1. создать белый список разрешенных скриптов (т.е. Google Analytics, Optimizely)
  2. Пользователь вводит новый сценарий, и это не на белом списке, т.е. Tableau, а функциональность ядра будет быть заблокированным/ограниченным/уменьшенным.

Определение понятия «заблокирован»: В случае, если скрипт не может взаимодействовать с любыми элементами на странице (т.е. часовых элементов формы и данные об уловах из представленных форм) или посещений пользователей, где данные и сбивающих с толку принципиально бесполезные.

Итак, учитывая приведенный выше пример, я ожидал, что функциональность Tableau будет уменьшена. Такие вещи, как отчеты Heatmap, больше не будут работать (поскольку мы блокируем взаимодействие с DOM, клиентские события не должны работать). Также я предполагаю, что, глядя на архитектуру Caja, посещение, как представляется, происходит от службы Cajoled, а не от браузера пользователей?

Глядя на Google Caja, кажется, что это может быть выбор, но фокус всегда вокруг всего HTML/CSS/JS (гаджета/приложения), где то, что я ищу, немного меньше в этом смысле. Возможно, существует альтернативное решение.

Это что-то, что можно настроить как универсальное, или ему нужна конкретная работа для каждого элемента белого списка/черного списка?

РЕДАКТИРОВАТЬ. В нем есть различные типы сценариев песочницы, но все они выглядят относительно неподдерживаемыми или на этапах их производства.

JSandbox https://github.com/eligrey/jsandbox

JS.js https://github.com/jterrace/js.js

ответ

2

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

Caja сам по себе не поддерживает предложенные вами модели с «белыми сценариями»; главный принцип заключается в том, что никакой код не должен «доверять» больше, чем ему нужно, чтобы выполнять свою работу, и поэтому мы фокусируемся на авторизации на основе предполагаемого использования программы, а не ее автора. Если вам нужен белый список скриптов с полным доступом к странице, то это то, что вам нужно будет создать самостоятельно, но это не будет сложной проблемой и, возможно, в любом случае необходимо тесно интегрироваться с вашей CMS.

Теперь поддержка исполняемых скриптов с «уменьшенной» функциональностью - это что-то Caja может помощь с. Тем не менее, неясно, какое именно сокращение вы хотите.

  • Если все, что вы хотите сделать, это запустить код и получить ввод/вывод данных, а затем просто SES достаточно для обработки, что легко; весь изолированный код в Caja автоматически запускается под SES, или если он подходит вашему приложению, вы можете загрузить SES без Caja, который немного легче, но требует большего понимания того, как писать безопасный JavaScript.

    (Это также та же роль, что и другие песочницы JS, о которых вы упоминали. По сравнению с другими вариантами, которые вы упомянули, SES, вероятно (я не смотрел их подробно) упрощает поддержку тесного взаимодействия с изолированный код, например, вызовы функций в обоих направлениях без асинхронных обратных вызовов.)

  • Если вы хотите предоставить отфильтрованный доступ к простым API-интерфейсам, Caja может легко это сделать, используя средство «укрощения».

  • С другой стороны, если вы хотите, чтобы обеспечить ограниченный доступ к DOM существующей страницы, то Каха не имеет ничего в готовом виде для вас, но может быть изменяемыми для этой цели. Как вы, по-видимому, заметили, CAME DOM приручает слой, сосредоточенный на предоставлении изолированного кода полного контроля фрагмента страницы, а не доступа к отдельным аспектам всей страницы. Для этого потребуется некоторое изменение. (Один случай, который будет особенно удобен для поддержки, если он представляет интерес, заключается в том, чтобы предоставить только для чтения доступ ко всей странице, Caja поддерживает это для своих нужд, но просто не публикуется способ попросить об этом.)

Если вы все еще заинтересованы в использовании Кахи, я рекомендую вам начать обсуждение google-caja-discuss и описать, какой именно уменьшенную функциональность вы хотите поддержать.

Отказ от ответственности: Я работаю в Google по проекту Caja, но этот пост - это полностью моя собственная точка зрения и мнение.

Смежные вопросы