Javascript解密文件而客户端无法访问

时间:2019-09-06 17:05:05

标签: javascript security encryption three.js cryptojs

我想使用model-viewerthree.js在个人网站上展示我的一些3d模型。为了在网络上显示3d模型,客户端需要从服务器获取文件(3d网格和纹理图像)

但是我不希望我的访问者能够访问这些文件中的任何一个。希望您能指出正确的方向。这是我的一些想法,但我认为它们不会起作用:

(1)使用crypto-js之类的东西来加密和解密文件

  • 但是在前端解密文件时,用户也不能解密文件吗?
  • 密钥必须以某种方式转移到前端代码,不是吗?

(2)将文件切成小块,然后在客户端上重新组合

  • 与#1相同的问题
  • 用于重组的代码需要放在客户端上,并且可以用来访问文件

在阐述这些想法时,我不确定我尝试做的事情是否可能possible

万一这是不可能的...我能做些什么使用户很难访问这些文件吗?

1 个答案:

答案 0 :(得分:4)

简短的答案是:如果在网站上,您没有机会保护它免受那些有足够时间的坚定人士的攻击。唯一的例外是视频流,它可以使用“加密媒体扩展” API将视频显示到屏幕上,而浏览器的任何部分都无法与原始数据进行交互。

无论您做什么保护文件,读取文件的代码也都必须发送到浏览器。最终,原始数据将位于js运行时的内存中,可以使用内置调试器将其提取。任何以某种方式加密代码的机制也是如此。这使它变得更加困难,但并非不可能。您可以使用WebAssembly使代码的这一部分更加难以逆向工程,但是我不需要这样做:

最后,数据需要到达webgl-api,因此我可以使用浏览器扩展程序拦截相关的webgl调用,并在那里获取所有原始数据。您可以继续进行操作,并以一种可以在顶点着色器中解码的方式对顶点数据进行加密,但是请猜测一下:我也可以读取顶点着色器代码。

因此列表继续。只是没有办法以某种方式无法规避。但是也许您让没有人打扰到足够的困难...

对我来说,最有前途的选择似乎是:

  • 使用LoFi或部分模型在浏览器中与全分辨率模型的渲染一起渲染。我已经在几个下载CAD- / 3D模型的站点上看到了。他们使用了合并模型,有时减少了顶点数量,使用了低分辨率纹理,等等,同时提供了我付钱后最终结果的图像。

  • 组成您自己的文件格式,或隐藏开发人员工具的网络视图中使用的文件格式。例如,Google Maps / earth的3d数据就可以做到这一点(它们可能使用了基于protobuf的东西,但是很难进行反向工程)

  • 是的,我想您也可以将WebCrypto-API与预共享密钥一起使用,因此至少哪个文件包含3d数据至少不太明显。

    < / li>
相关问题