2

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

(Price * 1.175) + 25

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

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

1 / 0

或者

def func1():
    func1()
func1()

或者

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

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

4

2 回答 2

4

您通过指出没有什么可以阻止用户输入有效代码来回答您自己的问题。永远不要相信用户输入。曾经。

于 2009-12-14T18:07:25.040 回答
0

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

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

这样用户就不能强制导入任何危险的东西。还编译了服务器端 JScript,这对性能有好处

于 2009-12-14T18:09:18.400 回答