gpt4 book ai didi

javascript - 我可以将用户提供的 Javascript 可用的库列入白名单吗?

转载 作者:行者123 更新时间:2023-12-02 18:10:20 24 4
gpt4 key购买 nike

为了学习node.js,我正在编写一个网站,允许用户玩在线游戏Mafia。对于那些不熟悉 Mafia 的人来说,这是论坛上最常玩的游戏,让不知情的大多数(“城镇”)与知情的少数(“Mafia”)对抗。然而,尽管这是一个准确的简要概述,但实际上每个游戏 session 都可以表现出广泛不同的内部规则,这些规则可以极大地改变游戏机制。

我希望我的网站能够处理所有这些变化。起初,我计划为我的网站实现一个可以运行所有 Mafia 变体的综合框架。然而,在查看了几个不同论坛上存档的大量成品游戏规则集后,我意识到合理的规则和游戏机制的空间是如此巨大,以至于我基本上必须创建一种新的特定于领域的编程语言来允许所有可能的变体。为一个简单的个人项目发明一种新语言是相当愚蠢的,而且我目前对此不感兴趣,特别是考虑到我手头有一种非常好的语言,即 JavaScript。

因此,我决定让变体作者上传一个包含变体代码的 JavaScript 文件,我的网站将在适当的时候调用该文件。本质上,实现 Mafia 变体游戏逻辑(我的网站代码需要())的 JavaScript 模块将充当我网站“游戏引擎”的脚本语言。想想用于 C++ 游戏的 Lua。不幸的是,这引入了严重的安全问题。与浏览器不同, Node 运行的 JavaScript 可以访问文件系统、网络等。因此,恶意用户上传一个变体文件来删除我的硬盘内容或开始比特币挖掘是微不足道的,或者其他什么。

我的第一个想法是对每个用户上传的危险库(例如“fs”和“http”)代码执行replace(),将其替换为无效字符串,并在尝试加载文件时捕获随之而来的异常。然而,这种临时的黑名单技术感觉像是一种比我更聪明/更有知识的人之一能够立即克服的方法。 我真正需要的是一种将用户上传的代码有权访问的库列入白名单的方法。有没有办法在 Node.js 中使用 JavaScript 来做到这一点?如果没有,您会建议我如何尽可能保护运行 Node 服务器的计算机?

我目前的策略是要求我自己和少数可信用户在将用户上传的 JavaScript 变体代码引入系统之前对其进行审查,然后一致投票支持,但我希望有一个更自动的方法这样做的方法。

最佳答案

您需要使用vm用于此的模块。基本上它允许在自定义上下文中运行脚本,因此您可以放置​​您想要的任何全局变量,定义您自己的需求等。

您还应该记住,在 Node.js 中,如果没有任何库,就有可能损害您的应用程序 — 用户只需添加类似 while (true) {} 的内容即可停止整个过程。因此,您需要在单独的进程中运行所有不受信任的代码,并准备好在它们开始滥用 cpu 或内存时杀死它们。

关于javascript - 我可以将用户提供的 Javascript 可用的库列入白名单吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19761776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com