我正在开发一个基于 django 的 web 应用程序,它以 python 文件作为输入,其中包含一些函数,然后在后端我有一些列表作为参数通过用户函数传递,这将生成一个单值输出。生成的结果将是用于一些进一步的计算。
以下是用户文件中的函数的样子:
def somefunctionname(list):
''' some computation performed on list'''
return float value
Run Code Online (Sandbox Code Playgroud)
目前我使用的方法是将用户的文件作为普通文件输入。然后在我的 views.py 中,我将文件作为模块执行并使用 eval 函数传递参数。下面给出了片段。
这里 modulename 是我从用户那里获取并作为模块导入的 python 文件名
exec("import "+modulename)
result = eval(f"{modulename}.{somefunctionname}(arguments)")
Run Code Online (Sandbox Code Playgroud)
哪个工作得很好。但我知道这不是安全的方法。
我的问题,有没有其他方法可以安全地运行用户文件,因为我使用的方法不安全?我知道提议的解决方案不能完全证明,但是我可以运行它的其他方式是什么(例如,如果它可以通过 dockerization 解决,那么我可以使用 API 的方法或一些外部工具是什么)?或者如果可能的话,有人可以告诉我如何简单地沙盒这个或任何可以帮助我的教程..?
任何参考或资源都会有所帮助。
我从用户那里获取 2 个值 a 和 b 并执行 ab 但如果用户的答案是 -ve 那么我想将其转换为正数。
int main(int argc, char const *argv[])
{
int a,b;
cin>>a>>b;
cout<<(a-b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
怎么做 ?