是否可以隐藏/保护 webGL 中使用的数据?

Posted

技术标签:

【中文标题】是否可以隐藏/保护 webGL 中使用的数据?【英文标题】:Is it possible to hide / secure data used in webGL? 【发布时间】:2012-12-16 15:37:36 【问题描述】:

我学了一点webGL,主要是用three.js。 我加载 .obj 文件并以 3D 形式绘制它们。

我已将我的项目放在网上,例如:www.mydomain.com

我不介意人们通过浏览器查看我的源代码,但我显示的 .obj 文件来自不想泄露它们的人。

我完全是新手。

由于每个人都可以使用我的源代码,我猜想每个人都可以使用 .obj 文件。那么是否有可能隐藏或保护它们以便没有人可以下载它们?

【问题讨论】:

不,因为当你得到这些文件来绘制它们时,它们已经被下载到客户端机器上...... 你唯一的机会可能是混淆等等。 【参考方案1】:

如果您想在 javascript/WebGL 中访问和使用任何文件,我很确定您无法保护它们。它们需要在某个时候被解析为可用的格式,以便浏览器/javascript 能够显示它们。你有两个选择:

1) 混淆。我认为这不是一个很好的选择,因为最终有人总是可以使用 Firebug 和其他工具来访问您的文件的一些有用的表示。您可以通过在服务器端加密或加扰数据以及在 Javascript 中重建内容来使其变得不那么容易。或者只是使用非常规的方式来加载和表示文件。

您还可以在着色器代码中进行一些解码/解密,这将更难窃取。但这可能仅适用于纹理。

2) 减少文件的用处。如果有人要重用您的 OBJ 文件,他们可能希望将模型导入他们选择的软件并做一些事情。您无法阻止这种情况,但您可以去除文件中的额外信息,使文件更易于使用。这将使任何潜在的窃贼都不喜欢文件。

我这样做的原因完全不同,但我对 WebGL 的主要使用涉及将模型从 Sketchup 导出到 Collada,并在 WebGL 中显示它们。我的导出代码做了一些事情,作为副作用,导出的模型很难使用。这包括使所有组件实例唯一(去实例化?),将所有组件和组分解为普通几何体,对所有面进行三角剖分,删除隐藏的几何体等。

在没有原始文件的情况下将其带回 Sketchup 进行编辑将是一个 PITA...特别是因为我使用的模型本质上严重依赖于组件和组实例化。但是,仍然没有什么能阻止某人“按原样”窃取几何图形。

【讨论】:

【参考方案2】:

如果有人可以下载到浏览器,那么它就在用户的计算机上。

您可以使读取文件更加困难,但这只会减慢获取 .obj 数据的速度。如果有人想这样做,那么他/她最终可以做到。解密密钥必须始终在客户端计算机上。所以你只能放慢这个过程。所以问题变成了“你想让你的 .obj 阅读代码有多困难和多复杂,值得付出努力吗?”只需在文件开头添加一个额外的字节就足以使文件无法像在建模软件中那样打开。

我建议你教育你的人互联网是如何工作的,并简单地说这是不可能或不值得尝试这样做,并避免自己想出自制实现如何使数据读取更加困难。

【讨论】:

【参考方案3】:

查看其他答案,但这不是 WebGL 独有的。任何语言的任何程序都有这个问题。一旦数据在用户的计算机、手机等上,人们就可以获取数据。例子:

    reading an ios app's data reading a native PC app's data

另一方面,您可以遵循上述技术。使用您自己的格式。按摩数据,使其最适合渲染,这通常不利于编辑。

当然,您当然也可以让您的文件首先需要有人登录您的网站才能阅读,这与 gmail、facebook、google docs 等要求您登录的方式类似。这不会阻止他们在注册后获取文件,但是。 You can also setup your server so only your app can download the files。同样,这不会阻止用户在您的应用下载文件(或他们通过浏览器扩展程序注入 JavaScript)后获取文件,但可以防止您的带宽从直接链接到您数据的其他网站被盗。

【讨论】:

以上是关于是否可以隐藏/保护 webGL 中使用的数据?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用用户的视频卡在浏览器中计算sha256哈希值,例如。使用WebGL或Flash?

Linux 20180412 隐藏权限lsattr_chattr等

Webgl 每像素 1 位纹理

裸奔中的WebGL模型

如何保护隐藏字段数据不被更改

是否有用于 webgl 的 2d sprite 库? [关闭]