在某些语言中(Java、没有不安全代码的 C#,...)(应该)不可能破坏内存 - 没有手动内存管理等。这允许它们限制资源(访问文件、访问网络、最大内存使用,...) 非常容易地应用到应用程序 - 例如 Java 小程序(Java web 启动)。它有时被称为沙盒。
我的问题是:是否可以使用本机程序(例如用 C、C++ 等内存不安全的语言编写;但没有源代码)?我不是指简单的可绕过沙箱或防病毒软件。
我想到了两种可能:
- 以不同的操作系统用户运行应用程序,为此用户设置限制。缺点 - 许多用户,对于每个参数组合,访问权限?
- (不知何故)限制(OS API)函数,可以调用我不知道是否有任何可能性允许(至少在理论上)完全保护,没有绕过的可能性。
编辑:我对理论更感兴趣——我不在乎某些操作系统具有一些未记录的功能,或者如何在给定操作系统上对任何应用程序进行沙箱处理。例如,我想沙箱应用程序并只允许两个功能:从控制台获取字符,将字符放入控制台。怎么可能做到牢不可破,没有绕过的可能?
提到的答案:
- Google Native Client,使用 x86 的子集 - 正在开发中,以及(可能?) PNaCl - 便携式本机客户端
- 完整的虚拟机 - 显然是矫枉过正,想象一下数十个程序......
换句话说,本机(不安全的内存访问)代码是否可以在受限环境中使用,例如在 Web 浏览器中,具有 100%(至少在理论上)的安全性?
Edit2:Google Native Client正是我想要的——任何语言,安全或不安全,以本机速度运行,沙箱,甚至在网络浏览器中。每个人都可以使用您想要的任何语言,无论是在网络上还是在桌面上。