javascript - 保护用户定义的 javascript 函数以保护 node.js 服务器

标签 javascript node.js function security xss

我正在制作一个数学教学网页(NodeJS 后端和 Angular 前端)。我想要一种特殊的用户(创建者)来创建数学练习。这些练习之一可能如下所示:

Marie has ${nums[0]} oranges and ${nums[1]} apples. How many fruits does she have?

现在我想让创作者写一个这样的数字生成函数:

const generate = () => {
  const nums = new Array(2).fill(0).map(e => Math.floor(Math.random() * 10)
  return { nums: nums, answer: nums.reduce((p, c) => p + c, 0) }
}

此函数应发送到服务器并存储。当用户想试题时,题目应该在服务器上执行。 我应该怎么做才能保护服务器免受恶意代码的侵害,例如:

const generate = () => {
  process.exit()
}

最佳答案

非常简短的回答,这对服务器来说从来都不是真正安全的。不可能证明一个程序是安全的。有一些缓解措施(例如沙盒)可以提供帮助,但它最终始终是一种风险。对于此应用程序,可能是一个不必要的应用程序。

考虑一些不需要 exec 来传达公式的方法。一种方法可能是发送某种抽象语法树,或解析数学表达式。

这个 npm 包看起来很有前途。以与填写书面问题模板相同的方式填写数学表达式字符串模板。可能需要提供另一个对象来定义需要的随机数并将它们映射到模板中使用的名称。 数学表达式求值器

关于javascript - 保护用户定义的 javascript 函数以保护 node.js 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55552483/

相关文章:

javascript - D3.js:从选择中删除 force.drag

javascript - 区分 jQuery UI 中的 drop 和 sort sortable()

c++ - 拦截应用程序对 DLL 的函数调用

javascript函数参数作为私有(private)变量

node.js - 如何在 Node js 上提供 mp3 文件?

function - 用于删除 nils 的 LISP 函数

javascript - 在 JavaScript 中插入属性

javascript - 没有 'new' 无法调用类构造函数

node.js - ejs中的条件怎么写?

node.js - 将 Node 模块 checkin Git 中以获取新分支