如何保护节点webkit应用程序上的字体
How can I protect fonts on a node webkit app?
我想创建一个Node Webkit应用程序,但要避免重新分发字体文件。我想了几个办法。我正在考虑托管字体解决方案所使用的模型,其中托管了包含字体文件的临时URL。
我有一种加密字体文件的方法。您可以将字体转换为base64,并将其分配给带有闭包的javascript库中的局部变量。javascript文件被编译为二进制文件,最终用户无法读取。
将base64值设置为style属性可能会将字体作为base64值公开给DOM。我想做的是创建一个临时路由到我从私有base64值呈现的字体文件,然后在访问该路由后删除它。我可以作为node.js应用程序了解如何实现这一点,但我是NodeWebkit的新手,没有看到任何关于路由器的文档。
托管字体解决方案似乎允许一次性访问字体文件,因此用户无法下载文件。那么Node Webkit有能力执行路由吗?
首先:欢迎来到互联网,你不能阻止人们使用你发送给他们的数据。要么你不向他们发送数据,要么你接受这样一个事实,即一旦数据在他们的计算机上,他们就可以随心所欲地使用它(如果你希望人们能够通过浏览器连接到你的内容,浏览器需要下载并解码内容,这意味着你不能停止分发,事实上,在这种情况下,你是分发者)。
即使您将字体加载与会话标识符绑定(例如,您的用户必须首先点击页面URL,该URL设置cookie值,然后在他们尝试下载webfont并与最初设置cookie的IP相结合时检查该值),他们也只需要下载您的字体一次,就可以轻松访问并随心所欲地使用它。它要么位于浏览器的缓存目录中,要么可以通过JavaScript访问(例如,通过挖掘document.stylesheets
),这意味着它可以简单地转换为真实数据并保存到磁盘(例如,带有二进制mimetype的window.open会导致浏览器弹出保存到文件对话框)。
在那里,尽管你尽了最大努力,我还是下载了你的字体:如果你能给我发送数据,而我们为交换选择的技术是HTTP(S),我将能够访问这些数据,无论你如何进一步限制如何或何时我都可以获得这些数据。我只需要拿到一次。
所以:不要把精力集中在如何或何时。假设您的用户将可以访问您的字体,即使只有一次,而是将您的精力集中在他们使用您的字体后可以做什么上,因为这要重要得多。你可以做几件事来确保你分发的内容在你的内容之外基本上是无用的。例如:
- 不要使用完整的字体,而是使用子集,这样你的用户只能获得部分字体,这些字体严格包含渲染你自己的内容所需的字形。这严重限制了其他人的能力。你可以随心所欲,为每页甚至页面的每个部分提供专用的子集字体
- 将字体的
fsType
标志设置为不允许安装。这样,人们会得到你的字体,但除了在网上,他们不能再使用它们 - 请确保在字体本身正确标记字体许可证,这样,如果的人确实使用您的字体,您就有法律追索权,并可以起诉他们在"个人使用"上下文之外规避您的许可证
然而,如果你也想利用缓存,你不想做(1)、(2)和(3)足以为你追查使用你字体的人提供法律依据。
一句话:阻止用户"获取"你的数据是浪费时间。这是互联网,你的用户获取你的数据完全是技术的关键。相反,要专注于确保他们得到的东西只在你的内容上下文中有用。
毕竟,如果TypeKit能做到这一点,你也能。(这将是一个额外的建议:如果你可以使用现有的解决方案,就不要推出自己的解决方案。字体可以通过Typekit或类似的工具获得吗?使用它们,省去重新发明轮子的麻烦)
您可以对其进行加密,然后使用节点本机方法对其进行解密:http://lollyrock.com/articles/nodejs-encryption/
此外,您可以将所有资产压缩到一个文件中,并将其重命名为"package.nw",chrome可执行文件将运行它(我知道这不是一个可靠的安全措施)。此外,有了该文件,您还可以将其与nw.exe文件合并,在那里,您将只得到一个可执行文件,因此,普通用户将无法查看您的文件,并且您的package.json文件受到某种程度的保护,从而阻止用户更改配置并查看您的档案/资产。https://github.com/nwjs/nw.js/wiki/How-to-package-and-distribute-your-apps#step-2a将您的应用程序与nw可执行放在一起
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在phonegap应用程序内部重定向不起作用
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- Node.js正在更改应用程序以使用集群模块
- 在openshift node js应用程序中获取请求
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题