# oj-lovers-codesandbox **Repository Path**: code_xiaohui/oj-lovers-codesandbox ## Basic Information - **Project Name**: oj-lovers-codesandbox - **Description**: oj-lovers代码沙箱实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-07-07 - **Last Updated**: 2024-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 代码沙箱通用服务 作者:小辉code > 方案一. Java 原生实现代码沙箱 #### ---核心实现思路:用程序代替人工,用程序来操作命令行,去编译执行代码 ##### ---核心依赖:Java 进程类 Process 具体思路参考如下: ###### 1.把用户的代码保存为文件 ###### 2.编译代码,得到 class 文件 ###### 3.执行代码,得到输出结果 ###### 4.收集整理输出结果 ###### 5.文件清理,释放空间 ###### 6.错误处理,提升程序健壮性 该方式缺点: 1. 如果要做比较严格的权限限制,需要自己去判断哪些文件、包名需要允许读写。粒度太细了,难以精细化控制。 2. 安全管理器本身也是 Java 代码,也有可能存在漏洞。本质上还是程序层面的限制,没深入系统的层面。 > 方案二. Docker 实现代码沙箱 实现思路:docker 负责运行 java 程序,并且得到结果。 流程几乎和 Java 原生实现流程相同: 1. 把用户的代码保存为文件 2. 编译代码,得到 class 文件 3. 把编译好的文件上传到容器环境内 4. 在容器中执行代码,得到输出结果 5. 收集整理输出结果 6. 文件清理,释放空间 7. 错误处理,提升程序健壮性 docker容器安全性控制 具体见代码 1.超时控制 2.内存资源 3.网络资源 4.权限管理 可以考虑 :结合 Java 安全管理器和其他策略去使用