-2

我正在使用 JavaScript 开发一个系统,我想让它只在常见的网络浏览器(如 IE9、Firefox、Chrome、Safari、Opera 等)上工作。

首先,我使用带有选项的Closure 库+ Closure 编译器ADVANCED_OPTIMIZATION压缩了我的代码,生成的代码看起来有点难以理解。不幸的是,使用这样的工具可以轻松地将代码转换为漂亮(且可读)的东西。

其次,我选择了易于阅读但难以理解的算法。例如,对于那些以前从未开发过此类算法的人来说,解码 Reed-Solomon 代码的脚本可能很难理解。当然这个解决方案并不完美,因为对 Reed-Solomon 代码有深入了解的人可能会弄清楚里面写了什么,即使代码被压缩并且没有注释。

但主要问题是我的复杂代码只需复制粘贴到非 Web 浏览器 javaScript 环境(如Rhino + env.jsPhantomJS等)即可轻松运行。

如果有 .

4

3 回答 3

3

我不太明白这个问题的意义,但听起来你担心的是你不希望人们窃取你作为网站一部分返回的 JS。

如果是这样的话,只有一个真正的解决方案:在服务器上完成工作。

于 2013-10-16T15:38:39.817 回答
2

您可以使代码难以运行,但最终,它是您提供给世界的源代码。任何类型的混淆和加密都必须在浏览器执行之前被反转,这意味着任何人最终都可以对代码进行逆向工程。

如果你不想要这个/不能拥有它,那么浏览器不是适合你的工具。您可以尝试编写桌面应用程序或构建设备(= 受硬件保护的代码),但这只会提高逆向工程的门槛。人们确实会从芯片上磨掉盖子,以了解它们是如何工作的。

根据我的经验,您可以使“窃取”您的宝贵数据变得有些困难,但您无法阻止它。您应该考虑的其他缺点:

  • 付费客户会被您强加给他们的错误和限制所冒犯(盗版者只会删除您的复制保护)。
  • 好莱坞在 DVD CSS 和 HDMI 上花费了数百万美元。两种保护系统都在相对较短的时间内被绕过。你打算花多少钱?
  • 也许您的时间和精力花在为客户提供更好的服务上,这样他们就不会觉得有必要从您那里“窃取”。
于 2013-10-16T15:42:26.437 回答
0

将此添加到脚本的开头:

if(typeof window === 'undefined')
  throw new Error('This script is meant to run in a web browser');

在您认为合适的情况下对其进行混淆。

如果您出于安全目的这样做,那将是毫无意义的努力。您在用户浏览器上运行的 Javascript 中所做的一切都可以被用户读取和修改。不仅如此,他们还很容易做到这一点。您不希望用户看到的任何数据根本不应该发送到他们的浏览器。所有处理都应该在服务器端完成。

于 2013-10-16T15:33:28.613 回答