#sandbox #cli #memory #child-process #ctrl-c #spent #rink

rink-sandbox

用于限制代码内存使用量和运行时间的库,并允许中断(Ctrl+C)

1 个不稳定版本

0.6.1 2021年6月6日

#6#spent

每月 38 次下载
rink 中使用

MPL-2.0 许可证

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