我正在创建一个Rails应用程序,该应用程序具有针对多个客户端的电子商务元素 - 我希望这些客户能够在管理区域中指定用于计算其运送量的公式;这些方法可能有所不同。
让我假装我允许他们输入ruby代码,然后我(稍后计算订单的运费)评估结果 - 它会相当灵活,因为,如果我设置事先确定一些适当的变量,它们可以输入不同的公式,例如:
......当然,这些主题有一百种变化。
现在,问题在于将他们的代码评估为ruby将是一个安全噩梦,允许他们向系统外壳,访问我的数据库,并且通常会造成严重破坏,无论是偶然还是设计。根据我的理解,$ SAFE似乎并不是对安全的保证。
所以,我的实际问题(是的,我确实有一个,最终!)是:是否有一种简单,安全的脚本语言,我可以让用户输入表达式(使用我预先播种的变量),然后计算表达式的结果,但不允许系统调用,数据库访问等?
我必须能够从ruby中解释和运行语言,但语言本身并不一定是ruby - 它几乎可以是任何东西,尽管我更喜欢它对客户来说相当可读,并且能够处理我在上面的ruby示例中使用的那种表达式。布朗尼指出,当我们输入表达式时,我能够对表达式进行语法检查,以向客户指出任何明显的错误。
(当然,除非你能指出我如何在红宝石中做一个“安全”的沙盒评估,这也符合要求。)
答案 0 :(得分:1)
为了输入任意值,我建议看一下像Liquid Templates或Radiant Tags这样的东西 - 你可以建立自己的模板语言来隔离解释的代码。
另一种方法是使用JavaScript(或CoffeeScript)并与JS解释器集成 - 有许多工具可以将Ruby连接到各种JS VM。
那就是说,我认为通过一些智能UI来处理这个问题可能更容易,而不是让用户输入方程式。选择几个最可能的运输选项,并构建一组用于输入值的小部件,然后可以简单地将其验证为整数。
您可以使用此方法实际处理每个示例
安全,从用户体验的角度来看可能是一种更友好的方法。
答案 1 :(得分:0)
是否有一种简单,安全的脚本语言,我可以使用它来允许用户输入表达式
Lua一直都是这样的。