如何安全地让用户输入图形程序的自定义数学函数

时间:2018-03-04 21:00:16

标签: python eval user-input

我正在使用Python开发一个图形程序,让用户输入数学函数的公式(类似f(x) = 2*x*sin(x)),然后以动画方式绘制它。目前我已经使用eval()实现了这一点,但是我知道它是多么危险以及防止它执行恶意代码是多么棘手 - 如果它甚至可能的话。

浏览StackOverflow存档时,我发现ast.literal_eval()是一种可能的解决方案,但它会限制公式包含sinlog等命名函数以及其他我自定义的函数定义。此外,我想允许用户使用标准的Python语法输入更复杂的公式,如

f(x) = x**2 if x<0 else x

f(x) = sum([1/n**x for n in range(1,11)])

这样可以绘制分段和求和公式。

我想到的一个可能的解决方案:如果我能以某种方式禁止我的Python程序写入磁盘,访问互联网或执行外部程序,那么这将(尽我所知)防止任何永久性破坏性代码被运行(例如擦除磁盘,传输私人信息等)。

有没有办法在内部禁用Python程序写入磁盘,访问互联网或执行外部程序?或者,如果不这样做,是否还有其他方法可以安全地允许用户输入自定义数学函数,同时还保留了使用更复杂表达式的自由度?

0 个答案:

没有答案