Как я могу защитить шрифты в приложении node webkit?

Я хотел бы создать приложение Node-Webkit, но не распространять файлы шрифтов. Я придумал несколько подходов. Я рассматриваю модель, используемую размещенными решениями для шрифтов, где размещается временный URL-адрес, содержащий файл шрифта.

У меня есть способ зашифровать файл шрифта. Вы можете преобразовать шрифт в base64, назначив его локальной переменной в библиотеке javascript с закрытием. Файл javascript скомпилирован в двоичный файл и не может быть прочитан конечным пользователем.

Установка значения base64 для свойства стиля потенциально может предоставить шрифт как значение base64 для DOM. Что я хотел бы сделать, так это создать временный маршрут к файлу шрифта, который я отображаю из частного значения base64, а затем удалить маршрут после доступа к нему. Я вижу, как добиться этого в приложении node.js, но я новичок в Node-Webkit и не вижу никакой документации по маршрутизатору.

Похоже, что размещенные решения для шрифтов разрешают однократный доступ к файлам шрифтов, поэтому пользователи не могут загружать файлы. Итак, есть ли у Node-Webkit возможность выполнять маршрутизацию?


person Jack Shultz    schedule 07.04.2015    source источник
comment
node-webkit (ну теперь официально NW.js) имеет доступ к любому модулю node.js. Поэтому Express может работать. Я не уверен, но вы могли бы сделать что-то подобное: expressjs.com/guide/routing.html   -  person mkaminsky    schedule 07.04.2015
comment
Большой! Поэтому, если я могу использовать экспресс в NW.js, я могу затем прочитать двоичную версию файла шрифта с частной переменной и создать одноразовый файл res.render(font_file), который приложение будет читать один раз. Другой подход, поскольку я использую angularJS, может создавать маршрут через angular к файлу font_file. Это может быть полезным подходом для защиты шрифтов!   -  person Jack Shultz    schedule 07.04.2015


Ответы (2)


Прежде всего: добро пожаловать в Интернет, вы не можете запретить людям использовать данные, которые вы им отправляете. Либо вы не отправляете им данные, либо принимаете тот факт, что как только данные окажутся на их компьютере, они могут делать с ними все, что захотят (если вы хотите, чтобы люди могли подключаться к вашему контенту через браузер, браузер необходимо загрузить и декодировать содержимое, что означает, что вы не можете остановить распространение, и фактически вы являетесь распространителем в этом сценарии).

Даже если вы привязываете загрузку шрифта к идентификатору сеанса (например, ваш пользователь должен сначала нажать на URL-адрес страницы, который устанавливает значение файла cookie, которое затем проверяется, когда они пытаются загрузить веб-шрифт в сочетании с IP-адресом, для которого был файл cookie установлен изначально) им нужно всего лишь загрузить ваш шрифт один раз, чтобы получить к нему доступ и делать с ним то, что они хотят. Он либо будет находиться в каталоге кеша их браузера, либо будет доступен через JavaScript (например, путем майнинга document.stylesheets), что означает, что он тривиально преобразуется в реальные данные и сохраняется на диск (например, window.open с двоичным типом mime заставляет браузеры всплывать диалоговое окно сохранения в файл).

Там я только что загрузил ваши шрифты, несмотря на все ваши усилия: если вы можете отправить мне данные, а технология, которую мы выбрали для этого обмена, — HTTP(S), я смогу получить доступ к этим данным, независимо от того, сколько вы дополнительно ограничить как или когда я могу получить эти данные. Мне просто нужно получить его один раз.

Итак: не сосредотачивайте свои усилия на том, как и когда. Примите тот факт, что ваши пользователи будут иметь доступ к вашему шрифту (шрифтам), пусть даже только один раз, и вместо этого сосредоточьте свои усилия на том, что они смогут делать с вашим шрифтом (шрифтами), когда они это сделают, потому что это гораздо важнее. Есть несколько вещей, которые вы можете сделать, чтобы убедиться, что то, что вы распространяете, в основном бесполезно вне вашего контента. Например:

  1. Не используйте полные шрифты, используйте подмножества, чтобы ваши пользователи получали только частичные шрифты, содержащие строго те глифы, которые необходимы для рендеринга вашего собственного контента. Это сильно ограничивает возможности других. Вы можете зайти так далеко, как вам нравится, предоставляя выделенные подмножества шрифтов для каждой страницы или даже для каждого раздела страницы.
  2. Установите флаг fsType для вашего шрифта(ов), чтобы запретить установку. Таким образом, люди получат ваши шрифты, но не смогут использовать их в дальнейшем, кроме как в Интернете.
  3. Обязательно правильно пометьте лицензию на шрифт(ы) в самом шрифте, чтобы, если люди действительно используют ваши шрифты, вы могли обратиться в суд и подать на них в суд за обход вашей лицензии за пределами «личного использования». контекст.

Однако, если вы также хотите воспользоваться кэшированием, вы не хотите делать (1), а (2) и (3) достаточно, чтобы дать вам законное основание преследовать людей, которые используют ваш шрифт (шрифты). .

Итог: не позволять пользователям «получать» ваши данные — пустая трата времени. Это Интернет, ваши пользователи получают ваши данные, и это полностью точка технологии. Вместо этого сосредоточьтесь на том, чтобы убедиться, что то, что они получают, полезно только в контексте вашего контента.

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

person Mike 'Pomax' Kamermans    schedule 07.04.2015

Вы можете зашифровать его, а затем расшифровать с помощью собственных методов узла: http://lollyrock.com/articles/nodejs-encryption/

Также вы можете заархивировать все свои активы в один файл и переименовать его в «package.nw», и исполняемый файл chrome запустит его (я знаю, что это не надежная мера безопасности), плюс с этим файлом вы также можете объединить его с nw.exe, вы получите только один исполняемый файл, поэтому обычные пользователи не смогут видеть ваши файлы, а ваш файл package.json каким-то образом защищен, что не позволяет пользователям изменять конфигурацию и видеть ваш файлы/активы. https://github.com/nwjs/nw.js/wiki/Какупаковать-и-распространить-ваши-приложения#step-2a-поместить-ваше-приложение-с-nw-исполняемым

person martuanez    schedule 18.05.2015