我想了解有关沙盒的更多信息。不只是关于它。我想学习这样我就可以编写一个简单的沙箱。
令人惊讶的是,任何地方都没有任何可用的信息。甚至维基百科的文章也不好。
任何人都可以请给我推荐好的材料。我知道它的概念非常先进。那么,学习和掌握它的先决条件是什么。
阅读有关 API 挂钩的信息,例如sandboxie挂钩 Windows 内核以过滤对文件系统的所有 api 调用并将其结果重定向到沙箱,您可以挂钩 API 并对其进行过滤,仅传递有效参数,为无效调用返回错误
对于 API 挂钩,您会在网上找到大量资料,请在 codeproject.com 上尝试
Google 的 Chromium 使用沙盒,并且有几个关于它的文档:
您还可以查看FreeBSD 中的 jails。这些是沙盒的 FreeBSD 等价物。
jail的源代码是可用的(尽管您还必须了解其余的 FreeBSD 代码。)
一个简单的沙箱只是一个让“某事”执行但限制它可以做什么的环境。
通常,这个“东西”是一种已经存在的语言,如 Java、JavaScript、C# 或本机代码。Java 具有用于小程序等的“沙盒”API,.NET 具有各种“信任”级别,JavaScript 具有由解释器(浏览器)设置的边界。
所以“编写”你自己的沙箱有点奇怪,除非你也有你想要沙箱的语言。
你有这样的语言吗?你想具体了解什么?
这在很大程度上取决于您想要沙箱。如果它是一个具有多种接口/语言的成熟系统,你真的不想重新发明轮子,而是在VirtualBox、QEmu或其他替代方案中运行虚拟机
无论如何,沙箱是,至少在某种程度上是您“应该”运行的系统的虚拟化......
如果您需要对单一(解释的)语言的应用程序进行沙箱处理,那么修改解释器听起来是一种明智的方法。
答案可能是特定于语言的。不幸的是,大多数语言都没有内置的沙盒功能。但是函数式语言往往足够强大,以至于可以从头开始构建而无需扩展语言。
在 Tcl 中,基本机制是创建从解释器:
interp create -safe sandbox
interp eval sandbox $set_up_code
set result [interp eval sandbox $unsafe_code]
前几天我写了一篇关于 Linux 中沙盒方法的概述,其中链接到了许多不同技术的参考资料。类似的方法适用于其他操作系统。我希望它会有所帮助——我也找不到太多全面的文档。