在c++中是否有一种安全的方式来执行来自用户/客户端的代码?

Is there a safe way to execute code from users/clients in C++?

本文关键字:方式 执行 代码 客户端 用户 安全 是否 c++ 一种      更新时间:2023-10-16

用户/客户端将他们的c++代码编译为动态库(例如:libuser.so)并上传到Linux(x64)的服务器。

服务器进程打开libuser.so并调用其中的函数

  1. 如何防止服务器进程核心转储(和其他错误)从任何错误 libuser.so ?
  2. 如何控制libuser.so可以访问的资源?(如内存、磁盘、CPU)
  3. 可能有一些邪恶的用户/客户。

没有100%安全的场景,但通常是这样的:

  • 为此类活动指定一个特殊用户
  • 限制此用户的所有内容
  • 当libuser需要被执行时,以这个特殊用户生成一个新进程,chroot到沙盒并祈祷:

除了SergeyA答案之外,我建议使用vmwarevirtualbox或类似的东西在虚拟机上执行代码。您可能可以为每个用户,每个会话创建一个新的虚拟机(这可能太昂贵)等,共享一些路径,复制libuser。然后使用RPC进行调用并返回结果。

使用https://www.docker.com/代替vmware等可能会简化创建新的虚拟机,并使其更便宜。