gpt4 book ai didi

javascript - 如何安全地评估用户输入表达式

转载 作者:搜寻专家 更新时间:2023-10-31 23:16:42 25 4
gpt4 key购买 nike

我想使用标准 javascript 来解析验证为 bool 值的用户表达式,例如:

var1 > obj1.prop1 && var2 + 1 <= 5

由于这些表达式是由用户编写的,我想确保它们是干净的,因为它们将在服务器端使用 NodeJS 进行计算。

我不必将表达式解析为文本来寻找模式并重新发明轮子,有没有一种方法可以利用 Node 的强大功能直接计算表达式而没有代码注入(inject)的风险?

最佳答案

您可能不喜欢这个答案。但是你必须工作。没有 Elixir 。

您的问题自相矛盾,要求“标准 javascript”和“没有代码注入(inject)的风险”。你不能两者兼得。标准 JavaScript 允许像 'require("fs").rmdirSync("/")'

这样的表达式

用户输入的表达式必须严格限制在 JavaScript 的一个非常有限的子集内。在尝试对其求值之前,服务器必须验证输入仅限于此子集。

所以首先你需要仔细考虑允许的有限子集。看起来您想允许像“5”这样的常量整数,像“>”、“&&”和“<=”这样的运算符。您还允许访问诸如“var1”、“obj1.prop1”、“var2”之类的变量。我想您需要非常具体地说明允许的变量列表。

防止脚本注入(inject)的关键是定义一个子集,其中只包含您知道是安全的东西。您不应该尝试从整个 JavaScript 开始并排除您认为危险的东西 - 因为您会遗漏一些。

仔细定义表达式可能包含的内容后,您需要实现代码来解析和验证表达式。您可能会找到一个库或标准代码来执行此操作,但您必须修改或配置它以满足您的特定要求。

关于javascript - 如何安全地评估用户输入表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930726/

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