Управление динамически загружаемыми скриптами в Meteor.js - PullRequest
0 голосов
/ 07 июня 2019

Будет ли какой-либо механизм (по крайней мере, теоретический), который позволил бы контролировать, какие сценарии предоставляются клиенту? Я разделил код на динамически загружаемые части, используя import('dynamically_loadable_file'), но всякий раз, когда он вызывается на клиенте, файл обслуживается. Я хотел бы выполнить некоторые проверки безопасности, имеет ли пользователь разрешение на загрузку файла. Я думал о промежуточном программном обеспечении, но оно предназначено только для HTTP, а исполняемые скрипты обслуживаются через WebSockets.

Кроме того, если бы это было возможно, я бы хотел контролировать содержание предоставленных скриптов. Например. Я хотел бы добавить или «спрятать» некоторые функции или переменные в сценарии, основываясь на загрузке их пользователем. Я думаю, что-то вроде динамической компиляции с использованием AST потребуется, или, может быть, есть / будет доступно что-то еще. Я полагаю, что это другой уровень, но если бы по таким идеям был доступен контент, я был бы благодарен.

Может быть, это вообще невозможно с метеором, поэтому, если это возможно где-то в мире JavaScript (node.js), это тоже поможет.

Спасибо за идеи и объяснения.

1 Ответ

1 голос
/ 07 июня 2019

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

Наиболее жизнеспособным решением вашей проблемы будет использование библиотеки рендеринга на стороне сервера (ssr) для вашей текущей фронт-end engine.

С помощью ssr вы можете решить, что

  • позволяет контролировать, какие сценарии предоставляются клиенту?

  • выполнить некоторую проверку безопасности, имеет ли пользователь разрешение на загрузку файла

  • Сценарии обслуживаются через WebSockets

  • контролировать содержимое предоставленных сценариев

  • добавлять или «скрывать» некоторые функции или переменные в сценариив зависимости от пользователя, загружающего их

Поскольку все ваши шаблоны отображаются на сервере и только полученные данные возвращаются клиенту.

Некоторые пакеты ssrдля Метеора:

Общий: https://docs.meteor.com/packages/server-render.html

React: https://www.chrisvisser.io/meteor/how-to-set-up-meteor-react-with-ssr (руководство со ссылкой на репозиторий)

Vue: https://github.com/meteor-vue/vue-meteor/tree/master/packages/vue-ssr

Родной путь Метеора

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

Отображение / скрытие HTML-элементов на клиенте не повышает безопасность, если ваши данные и логика не защищены на сервере.

Если вы публикуете только нужные данные для правильного пользователя (например, с помощью alanning:roles), то не имеет значения, какие скрипты вы загружаете.

То же самое относится и к методам: если вы очень строго относитесь к кому (используйтеснова alanning:roles) может вызывать метод, тогда это не имеет значения, если пользователь может отключить маршрутизатор и просмотреть все «скрытые» области на клиенте, поскольку все недействительные действия отклоняются на стороне сервера.

...