编译的JavaScript代码有多安全?

编译的JavaScript代码有多安全?,javascript,node.js,security,compilation,Javascript,Node.js,Security,Compilation,我们将node.js与express一起用作AES256单独编码数据的服务器网关。数据(和服务器代码)位于我们设施中一个锁得很严的房间中的一台服务器上,只能通过硬线以太网访问。接入点是专用的硬接线设备。如果有人能够窃取该服务器,他们可以访问源代码。他们将拥有我们编码数据的密钥和解码算法 如果我们编译了JavaScript node.js代码并只将其留在服务器上(而不是JavaScript源代码),会怎么样 编译过程是否提供了足够的安全性,使得有动机的窃贼无法识别用于保护存储的加密数据的编码/解码

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

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

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

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

没有

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

因此,在Javascript代码上运行的任何编译过程都只是压缩,可能会使其变得模糊。它仍然是纯文本Javascript代码。它仍然可以由任何人运行。任何人仍然可以诊断它的功能或工作原理。隐藏它(比如用一个或两个字母的短名称替换描述性变量名)会使分析代码和理解代码的工作稍微多一些,但这只是一个暂时的障碍,任何有决心的黑客仍然可以克服

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

您需要对服务器和服务器上的代码进行物理安全访问,以保护它,并且您需要依赖该保护


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

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

没有

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

因此,在Javascript代码上运行的任何编译过程都只是压缩,可能会使其变得模糊。它仍然是纯文本Javascript代码。它仍然可以由任何人运行。任何人仍然可以诊断它的功能或工作原理。隐藏它(比如用一个或两个字母的短名称替换描述性变量名)会使分析代码和理解代码的工作稍微多一些,但这只是一个暂时的障碍,任何有决心的黑客仍然可以克服

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

您需要对服务器和服务器上的代码进行物理安全访问,以保护它,并且您需要依赖该保护



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

您的问题没有通过这种方式得到适当缓解。不管你让一个糟糕的演员跳了多少次,无论多么不透明,它都在一台服务器上


寻找解决方案,其中解密需要一个从未保存到该计算机磁盘上的密钥,而是每次应用程序(或者更好的是,整个服务器)安全地检索该密钥启动诸如硬盘加密程序之类的程序,这些程序必须在主操作系统加载之前成功。

您的问题无法通过这种方式得到适当缓解。不管你让一个糟糕的演员跳了多少次,无论多么不透明,它都在一台服务器上

寻找解决方案,其中解密需要一个从未保存到该计算机磁盘上的密钥,而是在每次应用程序(或者更好的是,整个服务器)启动时安全地检索该密钥,例如必须在主服务器启动之前成功执行的硬盘驱动器加密程序