Ludd-Sandbox 使用Java和Docker实现的代码沙箱

782次阅读
没有评论

共计 563 个字符,预计需要花费 2 分钟才能阅读完成。

内容目录

项目介绍

 使用Java + Docker技术实现的一个可用于在线判题系统的代码沙盒(sandbox),可通过Http进行调用。

 Docker的容器化技术可以为我们隔离出一块非常安全的运行空间,通过Java程序,自动化将代码拷贝到容器中执行并获取响应结果。

 我们可以通过设置容器的最大内存、CPU核心数量等来限制代码运行的环境从而保护计算机的安全。

技术点

  • 使用docker-java操作Docker,实现镜像拉取、容器创建、代码执行等;
  • 使用简单工厂、模板方法等设计模式来扩展其他语言的代码沙盒实现。

效果

目前只实现了Java代码沙盒,其它语言需要进行扩展编写

标准输入输出(输入数据可为空)

Ludd-Sandbox 使用Java和Docker实现的代码沙箱

代码错误

这里演示的是代码编译错误

Ludd-Sandbox 使用Java和Docker实现的代码沙箱

超时恶意代码

超出最大时间限制会自动停止程序的运行,这里的Java程序设置的是2秒

Ludd-Sandbox 使用Java和Docker实现的代码沙箱

内存溢出恶意代码

超出容器内存限制会自动停止程序的运行,这里设置的100Mb。

Ludd-Sandbox 使用Java和Docker实现的代码沙箱

读取代码和删除代码

 容器内部的文件信息不会涉及到本机信息,删除容器内部文件不会影响到本机。

优化点

 因为代码沙盒需要通过一层Http请求来操作Docker,因此整个运行代码的过程所需时间会多一些,这在大量并发请求的时候,会影响整个沙盒判题的吞吐量。

正文完
 
PG Thinker
版权声明:本站原创文章,由 PG Thinker 2024-03-02发表,共计563字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
热评文章
Rust中所有权与借用规则概述

Rust中所有权与借用规则概述

在GC与手动管理内存之间,Rust选择了第三种:所有权机制...