我想创建一个Node-Webkit应用程序,但避免重新分发字体文件。我想到了一些方法。我正在考虑托管字体解决方案使用的模型,其中托管包含字体文件的临时URL。
我有办法加密字体文件。您可以将字体转换为base64,将其分配到带有闭包的javascript库中的局部变量。 javascript文件被编译为二进制文件,最终用户无法读取。
将base64值设置为样式属性可能会将字体作为base64值暴露给DOM。我想要做的是创建一个临时路由到我从私有base64值渲染的字体文件,然后一旦访问它就删除路由。我可以看到如何实现这个作为node.js应用程序,但我是Node-Webkit的新手,并且没有在路由器上看到任何文档。
托管字体解决方案似乎允许一次性访问字体文件,因此用户无法下载文件。那么Node-Webkit是否具有执行路由的能力?
答案 0 :(得分:2)
首先要做的事情是:欢迎使用互联网,您无法阻止人们使用您发送的数据。您要么不向他们发送数据,要么您接受这样的事实:一旦数据在他们的计算机上,他们就可以随意使用它(如果您希望人们能够通过浏览器连接到您的内容,浏览器需要下载和解码内容,这意味着无法停止分发,实际上你是这种情况下的分销商。)
即使您将字体加载绑定到会话标识符(例如,您的用户必须首先点击页面URL,这会设置一个cookie值,然后在尝试下载webfont并结合IP时检查该值最初设置了cookie)他们只需要下载你的字体一次就可以轻松访问它并按照自己的意愿去做。它要么存在于浏览器的缓存目录中,要么可以通过JavaScript访问(例如通过挖掘document.stylesheets
),这意味着它可以简单地转换为实际数据并保存到磁盘(例如带有二进制mimetype的window.open)浏览器弹出一个“保存到文件”对话框。)
在那里,我尽管你尽了最大努力下载了你的字体:如果你能把数据发给我,而我们为那次交换选择的技术是HTTP(S),我将能够访问这些数据,无论如何你有多少进一步限制 或 时我能获得那些数据。我只需要一次。
所以:不要把注意力集中在如何或何时。假设您的用户将可以访问您的字体,即使只有一次,而是将注意力集中在他们可以对字体执行的操作之后,因为这样做更重要的是。您可以采取一些措施来确保您分发的内容在您的内容之外几乎无用。例如:
fsType
标志设置为不允许安装。这样人们就会获得你的字体,但除了在网上外,他们不能再使用它们了但是,如果你也想利用缓存,你不想做(1),(2)和(3)就足以为你提供一个法律依据来照顾使用你字体的人(一个或多个)。
底线:阻止用户“获取”您的数据是浪费时间。这是互联网,您的用户获取您的数据完全是技术的重点。而是专注于确保他们获得的内容仅在您的内容的上下文中有用。
毕竟,如果TypeKit可以使这个工作,那么你也可以。 (这将是一个额外的建议:如果您可以使用已建立的现有解决方案,请不要推出自己的解决方案。字体是否可通过Typekit等获得?请改用它们并省去重新发明轮子的麻烦)< / p>
答案 1 :(得分:0)
您可以对其进行加密,然后使用节点本机方法对其进行解密: http://lollyrock.com/articles/nodejs-encryption/
此外,您可以将所有资源压缩到一个文件中,并将其重命名为&#34; package.nw&#34;并且chrome可执行文件将运行它(我知道这不是一个可靠的安全措施)加上该文件你也可以将它与nw.exe文件合并,你最终只有一个文件是可执行文件,因此普通用户将无法看到您的文件,并且您的package.json文件受到某种程度的保护,从而阻止用户更改配置并查看您的文件/资产。 https://github.com/nwjs/nw.js/wiki/How-to-package-and-distribute-your-apps#step-2a-put-your-app-with-nw-executable