编译后的 JavaScript 代码的安全性如何?

zip*_*zit 0 javascript security compilation node.js

我们使用 Node.js 和 Express 作为 AES256 单独编码数据的服务器网关。数据(和服务器代码)位于我们设施中一个严密锁定的房间中的单个服务器上,只能通过硬线以太网访问。接入点是专用的硬连线设备。如果有人能够窃取该服务器,他们就可以访问源代码。他们将拥有我们编码数据的密钥和解码算法。

如果我们编译 JavaScript node.js 代码并仅将其保留在服务器上(而不是 JavaScript 源代码)会怎样?

编译过程是否提供足够的安全性,使得有动机的窃贼无法识别用于保护存储的加密数据的编码/解码技术?

jfr*_*d00 5

编译过程是否提供足够的安全性,使得有动机的窃贼无法识别用于保护存储的加密数据的编码/解码技术?

不。

首先,您没有说出“编译过程”的真正含义。Javascript 中没有类似于将 C++ 编译为二进制汇编代码的过程。Javascript 是一种解释型语言,而不是编译型语言。Javascript 解释器可能会在 JS 引擎内部执行编译步骤,但这不是您可以自己完成的事情。Node.js Javascript 引擎需要纯文本合法 Javascript 作为输入。

因此,您在 Javascript 代码上运行的任何编译过程都只会压缩并且可能会模糊它。它仍然是纯文本 Javascript 代码。任何人仍然可以运行它。任何人仍然可以诊断它的作用或工作原理。模糊化它(例如用简短的一两个字母名称替换描述性变量名称)会使分析代码和理解代码变得更加困难,但这只是一个暂时的障碍,任何坚定的黑客仍然可以克服。

如果有人能够窃取该服务器,他们就可以访问源代码。他们将拥有我们编码数据的密钥和解码算法。

您将需要以物理方式安全地访问您的服务器和该服务器上的代码,以保护它,并且您将需要依赖该保护。


如果您使用的打包工具创建了可运行的 .exe 文件,请记住这并不是真正编译您的 Javascript。它只是将其打包到 .exe 的外壳中,以便本机代码 .exe 可以运行,可以从 .exe 中提取 Javascript,可以将其放入硬盘上的临时文件中,然后可以执行 node.js 传递它是 Javascript 源文件。这是打包步骤,而不是二进制编译步骤。现在,EXE 中的包可能是二进制压缩的,但是当代码传递到 node.exe 时,它​​仍然是纯文本 Javascript,坚定的黑客仍然可以看到它。