1 个不稳定版本
0.6.1 | 2021年6月6日 |
---|
#6 在 #spent
每月 38 次下载
在 rink 中使用
26KB
564 行
rink-sandbox
Rink-sandbox 被设计为对 Rink 查询进行沙盒处理(可能需要任意大的内存/时间)。Rink 的语法没有暴露任何类型的 IO,因此不需要完整的安全沙盒。
这个crate支持Windows、macOS和Linux。
这个crate在设计上尽量使其通用,适用于其他类型的应用程序,但可能不完全符合某些用例。
Rink-sandbox 是一个crate,用于在受限环境中运行应用程序代码,具体来说
- 内存使用量有限。
- 执行时间有限。
- 任务可以通过Ctrl+C中断。
- 恐慌被捕获并暴露给调用者。
这是通过在子进程中运行任务来实现的。内存使用通过 #[global_allocator]
进行限制。执行时间通过简单的超时来限制,而不是依赖于操作系统的调度器级别的定时。
这个crate中没有特定于平台的代码,这是由其他依赖项处理的。不安全代码仅限于需要的地方,即分配器。
消息使用 bincode 进行序列化,并通过子进程的 stdin/stdout 通道发送,以实现最佳的可移植性。
限制
- 这本身不是一种安全解决方案。在子进程中仍然允许所有网络、磁盘和其他环境访问。
- 您的应用程序代码需要避免在成为子进程时从 stdin 读取或写入 stdout。不幸的是,没有好的解决方案来重定向或捕获 stdout:gag 和 stdio-redirect 仅适用于 Linux,而 shh 不允许在管道关闭之前读取,直到阻塞。下一个最好的解决方案是编写一个日志记录器,并期望所有应用程序代码使用
log
而不是println
。 - 这可能不适合 CLI 应用程序之外的使用场景,但将来可能会得到改进。
依赖项
~10–22MB
~310K SLoC