# tyoj-code-sandbox **Repository Path**: TaoYaopc/tyoj-code-sandbox ## Basic Information - **Project Name**: tyoj-code-sandbox - **Description**: 代码沙箱是一个用于在线代码执行的安全沙箱系统,基于 Java 开发,采用 Spring Boot 框架。该项目实现了代码的编译、运行和安全隔离功能,适用于在线判题系统(OJ)的核心执行环境。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-14 - **Last Updated**: 2026-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TYOJ 代码沙箱 (tyoj-code-sandbox) TYOJ 代码沙箱是一个用于在线代码执行的安全沙箱系统,基于 Java 开发,采用 Spring Boot 框架。该项目实现了代码的编译、运行和安全隔离功能,适用于在线判题系统(OJ)的核心执行环境。 ## 项目简介 本项目提供了一个安全可控的代码执行环境,支持用户提交的 Java 代码在隔离环境中运行。主要特点包括: - **安全沙箱**:通过自定义 SecurityManager 限制危险操作 - **超时控制**:防止无限循环或长时间运行 - **黑名单过滤**:禁止执行敏感操作 - **内存限制**:防止内存溢出 - **进程管理**:安全地创建和管理子进程 ## 技术栈 - Java 17 - Spring Boot - Maven - Docker(可选集成) ## 项目结构 ``` tyoj-code-sandbox/ ├── src/main/java/com/taoyaopc/tyojcodesandbox/ │ ├── CodeSandbox.java # 代码沙箱接口 │ ├── JavaNativeCodeSandbox.java # Java 原生沙箱实现 │ ├── SimpleCompute.java # 简单计算示例 │ ├── TyojCodeSandboxApplication.java # Spring Boot 启动类 │ ├── controller/ │ │ └── MainController.java # 控制器 │ ├── docker/ │ │ └── DockerDemo.java # Docker 集成示例 │ ├── model/ │ │ ├── ExecuteCodeRequest.java # 代码执行请求 │ │ ├── ExecuteCodeResponse.java # 代码执行响应 │ │ ├── ExecuteMessage.java # 执行过程消息 │ │ └── JudgeInfo.java # 判题信息 │ ├── security/ │ │ ├── DefaultSecurityManager.java │ │ ├── DenySecurityManager.java │ │ ├── MySecurityManager.java # 自定义安全管理器 │ │ └── TestSecurityManager.java │ ├── unsafe/ │ │ ├── FileCode.java # 文件操作示例 │ │ ├── MemoryError.java # 内存溢出示例 │ │ └── SleepError.java # 睡眠示例 │ └── utils/ │ └── ProcessUtils.java # 进程工具类 ├── src/main/resources/ │ ├── application.yml # 配置文件 │ ├── security/ │ │ └── MySecurityManager.java # 安全管理器源码 │ └── testCode/ # 测试代码 │ ├── simpleCompute/ # 简单计算测试 │ ├── simpleComputeArgs/ # 带参测试 │ └── unsafeCode/ # 危险代码测试 └── pom.xml # Maven 配置 ``` ## 核心功能 ### 1. 代码执行接口 ```java public interface CodeSandbox { ExecuteCodeResponse executeCode(ExecuteCodeRequest executeCodeRequest); } ``` ### 2. 请求模型 ```java public class ExecuteCodeRequest { private List inputList; // 输入用例 private String code; // 待执行代码 private String language; // 编程语言 } ``` ### 3. 响应模型 ```java public class ExecuteCodeResponse { private List outputList; // 输出结果 private String message; // 响应信息 private Integer status; // 执行状态 private JudgeInfo judgeInfo; // 判题信息 } ``` ### 4. 安全机制 项目实现了多层安全保护: - **权限检查**:禁止文件读写、进程创建、网络连接等敏感操作 - **黑名单过滤**:使用敏感词过滤禁止的命令 - **超时限制**:默认 5 秒超时 - **进程隔离**:在独立进程中运行代码 ## 使用方法 ### 环境要求 - JDK 17 或更高版本 - Maven 3.6+ - Docker(可选,用于容器化执行) ### 编译运行 ```bash # 编译项目 mvn clean package # 运行应用 mvn spring-boot:run ``` ### API 调用 健康检查: ``` GET http://localhost:8080/health ``` 执行代码示例: ```java ExecuteCodeRequest request = ExecuteCodeRequest.builder() .code("public class Main { public static void main(String[] args) { System.out.println(\"Hello World\"); } }") .language("java") .inputList(Arrays.asList()) .build(); CodeSandbox sandbox = new JavaNativeCodeSandbox(); ExecuteCodeResponse response = sandbox.executeCode(request); ``` ## 测试代码示例 项目提供了多种测试代码: - `simpleCompute`:基础计算 - `simpleComputeArgs`:带命令行参数 - `unsafeCode`:危险代码测试(内存溢出、文件读写、进程执行等) ## 安全配置 在 `application.yml` 中可以配置: - 代码执行超时时间 - 全局代码目录 - 安全管理器相关配置 ## 注意事项 1. 本沙箱主要用于演示安全机制,生产环境建议使用 Docker 容器隔离 2. 危险代码示例仅用于测试沙箱安全性,请勿用于非法用途 3. 建议在生产环境中配置更严格的资源限制 ## 许可证 本项目仅供学习交流使用。