将用户输入的表达式作为IronPython执行是否安全

时间:2009-12-14 18:00:54

标签: asp.net security ironpython dynamic-language-runtime

我正在开发一个大型ASP.NET软件产品。我们希望允许用户输入表达式而不是某些字段的常量。通常类似于:

(Price * 1.175) + 25

显而易见的解决方案似乎是嵌入IronPython,创建一个Scope,传入“Price”(和其他)变量,然后执行上面的IronPython代码。

但是,没有什么可以阻止用户输入:

1 / 0

def func1():
    func1()
func1()

import System.IO
File.Delete(....)

但是,如果我捕获所有异常并在具有Internet权限集的应用程序域中运行IronPython代码,我安全吗?

2 个答案:

答案 0 :(得分:4)

您可以通过注意没有任何东西阻止用户输入有效代码来回答您自己的问题。绝不相信用户输入。如初。

答案 1 :(得分:0)

在类似情况下,我选择了服务器端JScript。为了添加另一层保护,我将表达式包装在一个函数中,然后执行函数:

function generated123(p1, p2, p3) {
     return
     // user code goes here
     ;
}

这样用户就无法强制导入任何危险的东西。此外,还编译了服务器端JScript,它有助于提高性能