C++:有办法到达 'jail function' 吗?

标签 c++ winapi function sandbox jail

嗯,它是一种网络服务器。

我加载.dll(.a)文件并将它们用作程序模块。

我递归地遍历目录,并将这些库中的“_main”仿函数放入名称下的 std::map 中,该名称包含在特殊的“.m”文件中。

主目录为每个主机提供了几个目录。

问题是我需要阻止使用“fopen”或任何其他文件系统函数来处理此主机目录之外的目录。

我能看到的唯一方法 - 为 stdio.h 编写一个扭曲(我的意思是,编写具有文件名检查的 s_stdio.h)。

它可能是一个守护进程,捕获系统调用并识别某些内容?

添加

那么,如果我只上传souses,然后检查后直接在我的服务器上编译呢?嗯,这是我发现的唯一方法(仍然将所有内容保留在一个地址空间内)。

最佳答案

由于 C++ 是低级语言,并且 DLL 被编译为机器代码,因此它们可以做任何事情。即使您包装了标准库函数,代码也可以直接执行系统调用,从而重新实现您所包装的功能。

有效沙箱此类 DLL 的唯一方法可能是某种虚拟化,因此代码不是直接运行,而是在虚拟机中运行。

更简单的解决方案是对应该沙箱化的可加载模块使用一些高级语言。一些高级语言更擅长沙箱(Lua、Java),其他语言则不太好(例如,据我所知,目前还没有为 Python 实现的官方限制环境)。

关于C++:有办法到达 'jail function' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2351794/

相关文章:

c++ - 动态创建 typedef 或更改函数返回类型

c++ - 在 C++ 中读取带空格的字符串

c - Winapi 多个 Windows 相同的 WindowProc

c - 为什么在一个 printf 中多次调用函数时只返回一个值?

javascript - 如何让 io.sockets.on 调用外部/全局函数?

c++ - 如何让 CMake 用两种不同的语言编译相同的输入文件?

c++ - 不确定如何处理析构函数(类中的大型顶点数组用作同一类的其他实例的数据源)

c++ - 是否有一种简单的方法可以从正常的 win32 C++ 代码向 Application Insights 提供数据?

c - 需要一个具有打印屏幕功能的winapi函数

function - Haskell 函数定义不带 ->