Как защитить код скрипта приложения в электронной таблице Google?

Я написал код для своей электронной таблицы Google с помощью редактора сценариев.

Я хочу поделиться этой таблицей со своими клиентами, но не хочу делиться написанным мною кодом.

Этот код добавляет в мою таблицу меню, содержащее полезные функции, которые должны работать / запускаться, когда мои клиенты открывают эту таблицу с примененным условием: они не должны видеть ее код.

С Excel это легко, но с таблицей Google я не знаю., Я много искал в Google, но все они дают представление о том, как поделиться таблицей. Например, в режиме "Просмотр", но в этом случае есть проблема: моя функция меню, которая добавляет меню, "onOpen" и не запускается, когда мои клиенты открывают его.

Как реализовать это в Google Spreadsheet?

6 ответов

Решение

Короткий ответ

Опубликуйте ваш скрипт как дополнение. Имейте в виду, что вы можете сделать его приватным, выбрав в списке или выбрав общий доступ к группе Google.

объяснение

Надстройки были добавлены в 2014 году. Это лучше, чем использование библиотеки, потому что в вашей надстройке не будет ничего общего.

Даже если пользователи вашего аддона смогут получить URL-адрес проекта скрипта Служб Google из файла crx из вашего аддона, так как он не будет передан, они не смогут получить доступ к коду.

Обратите внимание, что

  • получить доступ к серверному коду Google Apps Script с помощью Chrome Developer Tools или другого аналогичного программного обеспечения невозможно.
  • Существуют некоторые ограничения для дополнений, внимательно изучите их, так как, возможно, эта альтернатива вам не подойдет.

Если публикация в качестве надстройки не является для вас вариантом, вам следует переосмыслить свое решение с учетом использования веб-приложения, используя API сценариев приложений или API Google Sheets.

Рекомендации

Используйте библиотеку, документация объясняет, как ее использовать, и есть несколько интересных постов на эту тему.

Сделайте специальный файл библиотеки, содержащий только скрипт для вашего клиента. Ваш клиент должен иметь как минимум доступ на уровне чтения. Таким образом, он может видеть ваш сценарий. Удалите ваш скрипт и создайте новый невинный скрипт в этом файле и сохраните его как новую версию. Теперь ваш клиент видит только этот новый скрипт. Поскольку его приложение все еще работает со старой версией вашей библиотеки, оригинальный скрипт будет работать как обычно.

  1. Создайте 2 библиотеки; одна фиктивная (я называю ее Lib1) и другая основная библиотека, в которой есть все секретные коды (я называю ее Lib2).
  2. Добавьте Lib2 как библиотеку в Lib1 и используйте в ней необходимые методы, которые полностью реализованы в Lib2.
  3. Сделайте обе библиотеки общедоступными и установите для них разрешение Viewer.
  4. На странице настроек совместного использования Lib1 есть значок шестеренки. убедитесь, что не отмечен следующий параметр: "Читатели и комментаторы могут видеть возможность загрузки, печати и копирования"
  5. Добавьте Lib1 в скрипт ваших клиентов (возможно, скрипт электронной таблицы).
  6. Поделитесь сценарием вашего клиента в качестве редактора или читателя.

Если клиент мог получить идентификатор Lib1, открыв его из меню "Ресурсы / Библиотеки" своего скрипта, он не сможет получить доступ к меню "Ресурсы / Библиотеки" в Lib1. Он также не может сделать еще одну копию Lib1 из-за того, что на шаге 4 не отмечен параметр, который не позволяет ему увидеть идентификатор Lib2.

Помимо параметров, перечисленных в меню "Опубликовать" в окне редактора сценариев, следующие 3 параметра могут также сохранить конфиденциальность кода для разработчика.

Вариант 1: необходимо создать
3 файла:
1.1 Электронная таблица для приема пользовательского ввода, она служит пользовательским интерфейсом и должна быть предоставлена ​​пользователю.
1.2. Автономный файл сценария библиотеки для получения входных данных из электронной таблицы пользовательского интерфейса.
1.3 Автономный частный файл сценария для обработки данных, которые получает файл библиотеки.

Вариант 1 Электронная таблица

В качестве справочного материала для этого варианта используется таблица по указанной выше ссылке.
При нажатии кнопки "Отправить" идентификатор электронной таблицы отправляется в файл сценария библиотеки, а разработчик получает разрешение редактора. Затем закрытый файл сценария открывает файл и обрабатывает ввод.

Вариант 2:
необходимо создать 5 файлов
2.1 Электронная таблица, которая служит экраном входа в систему. Это передается пользователю.
2.2 Электронная таблица, которая служит фактическим приложением, содержащим данные. Пользовательский интерфейс. Эта таблица становится доступной пользователю после успешного входа в систему. Пользователь выходит из приложения с этого листа.
2.3 Электронная таблица, которая поддерживает статус входа пользователя. Это личное дело разработчика.
2.4 Файл сценария библиотеки, который обновляет статус входа пользователя в электронную таблицу, созданную на шаге выше, и изменяет права доступа к частному файлу сценария. Этот файл сценария включен как ресурс библиотеки как в электронную таблицу входа в систему, так и в электронную таблицу пользовательского интерфейса.
2.5 Файл скрипта библиотеки, обрабатывающий данные, введенные в лист пользовательского интерфейса. Этот файл сценария содержит код, который разработчик хочет сохранить в тайне. Этот файл включен как ресурс библиотеки только в электронную таблицу пользовательского интерфейса.

Вариант 2 Электронная таблица

В качестве справочной информации для этого варианта используется электронная таблица по указанной выше ссылке.
Когда пользователь нажимает кнопку "Начать", он входит в приложение после обновления значения ячейки в электронной таблице 2.3. Файл скрипта библиотеки, который содержит частный код, настроен на общий доступ после успешного входа в систему с помощью метода addViewer. Ссылка на приложение предоставляется пользователю, и пользователь взаимодействует с приложением во время "входа в систему". Когда пользователь выходит из приложения, вызывается метод removeViewer, чтобы снова сделать файл сценария приватным.
В этом случае файл частного кода доступен пользователям во время использования приложения. Файл может быть конфиденциальным с помощью таймеров, триггеров сценариев, подсказок, предупреждений и т. Д.

В обеих моих электронных таблицах я использую триггеры на основе времени, которые запускаются каждую минуту для обработки приложений. Это может вызвать задержку вывода. Триггеры создаются на стороне сервера, а не на стороне клиента.

Вариант 3. Личная общая папка.

Необходимо создать 2 файла:
3.1. Электронная таблица для получения пользовательского ввода, она служит пользовательским интерфейсом и должна быть предоставлена ​​пользователю.
3.2 Автономный частный файл сценария для обработки электронной таблицы.

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

Существует аналогичный вопрос здесь . Ответ там принимается.

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

Другие вопросы по тегам