直接从JSON评估代码,这是个坏主意,还是有更好的方法



本质上,我在Electron内部使用JavaScript、CSS、HTML等制作游戏,这样我就可以轻松访问本地文件。游戏将完全是本地和离线的。从不与服务器建立任何类型的连接。

但我的想法本质上是一些小的、独立的故事,它们被加载到一个池中,玩家可以从中选择,只需将它们放入一个文件夹,就可以包含在游戏中。为此,我使用了JSON文件,但我也希望能够在故事模块启动时生成特定于故事模块的变量。

例如,我希望故事模块中的角色有一个随机名称,所以在开头:

"do_at_start" : "story_variables.character_name = randomChoiceFunction('name1', 'name2', 'name3')"

我之所以想这样做,是因为任何想做的人都可以制作一个自定义的JSON文件,并以这种方式将它们放在游戏中,而不是编写函数等来制作一个新模块。

我认为最简单的方法是在需要时只在JSON值中的字符串中使用eval()代码。这是一个本地应用程序,这仍然是个坏主意吗?或者有没有其他方法也适用于此?理想情况下,我想得到一些可以从头开始的建议,作为一种练习,看看我是否可以从头开始写这样的东西,但如果其他方法更容易实现,我仍然会接受这些建议。

您所描述的似乎是一种非常合理的方式,可以为您的应用程序提供本质上是修改API的功能。Chromium(电子的基础(有一个相当强大的安全模型,所以我不会太担心恶意代码的风险。

如果你真的担心强化攻击表面,请确保遵循电子安全最佳实践,并考虑彻底禁用网络访问,和/或将应用程序限制在一个文件夹内。(SO链接作为示例提供,但您可能需要查找其他实现(。

另一种选择是使用您可能想要使用的每个函数构建一个完整的自定义解析器。您将扫描并替换输入文件中预定义的宏。如果你想继续前进,我建议你看看Sugarcube的做法。

最新更新