小编WOZ*_*NIK的帖子

如何在我的网络应用程序上安全地接受和运行用户的代码?

我正在开发一个基于 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 的方法或一些外部工具是什么)?或者如果可能的话,有人可以告诉我如何简单地沙盒这个或任何可以帮助我的教程..?

任何参考或资源都会有所帮助。

python django python-3.x docker google-kubernetes-engine

10
推荐指数
1
解决办法
1665
查看次数

如何在c ++中使任何整数为正?

我从用户那里获取 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)

怎么做 ?

c++ c++14

-1
推荐指数
1
解决办法
142
查看次数