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

1,099次阅读
没有评论

共计 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协议发布,转载请注明出处。
评论(没有评论)
热评文章
踩坑记录:Oracle 插入的数据出现丢失

踩坑记录:Oracle 插入的数据出现丢失

众所周知,Oracle 是一个安全性非常高的数据库,与 MySQL 相比,有很多不一样的特性。由于公司项目用到了 Oracle,加上平时自己用 MySQL 比较多,因此,最近在 Oracle 上面踩了一个大坑,耗费我一天时间 Debug。
Umi 4.x 集成 Tauri 快速开发桌面应用

Umi 4.x 集成 Tauri 快速开发桌面应用

最近在完成毕设过程中使用到了`Tauri`来开发桌面应用,前端框架优先考虑使用 React,脚手架选择使用`Umi.js`。但是全网搜索也没有搜索到 Umi 和 Tauri 集成的博客教程,于是只能参考`Tauri`官方文档手动集成,并在此做一个记录