在c++中是否有一种安全的方式来执行来自用户/客户端的代码?
Is there a safe way to execute code from users/clients in C++?
用户/客户端将他们的c++代码编译为动态库(例如:libuser.so
)并上传到Linux(x64)的服务器。
服务器进程打开libuser.so
并调用其中的函数
- 如何防止服务器进程核心转储(和其他错误)从任何错误
libuser.so
? - 如何控制
libuser.so
可以访问的资源?(如内存、磁盘、CPU) - 可能有一些邪恶的用户/客户。
没有100%安全的场景,但通常是这样的:
- 为此类活动指定一个特殊用户
- 限制此用户的所有内容
- 当libuser需要被执行时,以这个特殊用户生成一个新进程,chroot到沙盒并祈祷:
除了SergeyA答案之外,我建议使用vmware
或virtualbox
或类似的东西在虚拟机上执行代码。您可能可以为每个用户,每个会话创建一个新的虚拟机(这可能太昂贵)等,共享一些路径,复制libuser。然后使用RPC进行调用并返回结果。
使用https://www.docker.com/代替vmware等可能会简化创建新的虚拟机,并使其更便宜。
相关文章:
- 程序按执行方式工作,直到我向其添加析构函数为止
- 在服务器上执行操作的正确和 REST 方式?
- 在Visual C ++中与Stockfish(外部可执行文件)通信的最佳方式
- 在 Windows 命令行中运行.exe在使用 2 种相同方式执行时会产生不同的输出
- 无法以正确的方式执行其他程序
- 执行随机开关函数的QT方式是什么连续两次使用相同情况的方法
- 优雅地尝试以特定的方式执行各种功能
- 如果 QApplication 执行延迟,QWebEngineView 在加载内容时会以静默方式失败
- 为什么程序没有以正确的方式执行
- 如果与未使用的库链接,可执行文件的构建方式是否不同?
- pi的倍数到千分之一的值可能会改变循环执行方式
- 优雅的方式来执行许多闹钟
- 可执行文件在被复制时以某种方式损坏
- 使用 Linux Eclipse,我可以以编程方式判断我正在调试器 (gdb) 中执行
- 为什么 GNU ld 在链接可执行文件和共享对象时以不同的方式解析符号
- Visual Studio-在逐步执行时查看堆栈大小增长的方式
- 使用C++以编程方式执行静默安装
- 如何在没有弹出cmd窗口的情况下以c ++静默方式执行shell程序
- 给定一个期货容器,如何以非阻塞的方式执行所有获取
- 有没有办法在C++中以编程方式执行 adb 命令?这C++部分代码是使用 android Studio 中的 ndk b