使用服务器端 JavaScript 是否存在特定的安全漏洞?

信息安全 javascript
2021-08-21 21:35:56

我从未使用过 JavaScript 服务器端,实际上我什至不知道它会在那里使用或有用。现在我发现这是可能的并且有一个非常活跃的社区,我想知道在服务器端使用时是否存在一些已知的缺点。

在沙盒模型中是否有一些我应该注意的假设?我是否应该关心通常由浏览器强制执行的同源策略

3个回答

JavaScript 与任何其他语言(例如 C 和 Java)一样是一门语言。您可以在台式 PC 和服务器上运行 Java。同样,您可以在服务器上很好地运行 JavaScript。

Node.js是一种使用 JavaScript 语言的流行异步 I/O 库。正如GitHubKlout所证明的,它在服务器环境中运行得非常好

同源策略仅适用于浏览器,即客户端。从某种意义上说,沙箱仍然使用该语言,您可能不会遇到缓冲区溢出。它与浏览器中实现的沙箱不同,即不能访问套接字,也不能访问文件。

底线是将 JavaScript 视为一种通用语言。

从编程的角度来看,缺点是 JavaScript 解释器是单线程运行的。这方面可能会有所改进。从安全的角度来看,可能没有什么问题需要担心。

正如@Nam 指出的那样,Javascript“只是”一种与其他任何编程语言一样的编程语言。它有一些缺点,可能使它在恶劣的环境中使用起来有点微妙,例如,它的“数字”实际上是浮点值,所以当超过 2 53限制时,你开始失去一点精度:“安全编程“主要是为了确保代码在接收任何输入数据(甚至是无效的输入数据)时做出适当的反应,并且语言功能中的这种模糊性使其变得更加困难。没有什么可以使 Javascript 天生不适合服务器端编程,但它可能不是构建强大服务器的最简单的语言。

我见过一个昂贵的 SaaS 应用程序,它允许用户上传 Javascript 片段,这些片段将在事件触发时在服务器端执行。这对这个应用程序来说是一个非常有益的功能,但显然,因为他们正在执行用户上传的不受信任的代码,我确信他们开发了一个特殊的受限 Javascript 执行环境。

这与任何动态解释语言(如 Python 或 Ruby)遇到的问题相同。当您可以编写自己的受信任代码以在服务器上运行时,应该使用正常的应用程序安全实践,但是如果您正在执行来自用户的不受信任的代码,您需要限制解释器,例如,不能执行类似 Python 的eval()函数这样可以使用的东西逃离那个沙箱。