sandbox

package module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 22, 2026 License: MIT Imports: 28 Imported by: 0

README

sandbox

项目概述

sandbox 是一个基于 Go 语言开发的轻量级沙箱环境,用于安全地执行代码,支持 Python 和 Node.js 等运行时。该项目主要用于低代码框架的测试和验证,提供了网络访问控制、资源限制等安全特性。

功能特点

  • 多语言支持:内置支持 Python 和 Node.js 运行时,其他运行时可以通过 RegisterRuntime 注册。
  • 网络控制:
    • 支持允许/阻止互联网访问
    • 支持允许特定端口监听
    • 支持 IP 白名单和黑名单
  • 资源限制:
    • CPU 使用率限制
    • 内存使用限制
    • SWAP 限制
    • /dev/shm 和 /tmp 大小限制
  • 环境配置:支持自定义环境变量
  • 安全隔离:提供安全的执行环境,防止恶意代码影响系统
  • 跨平台支持:支持 Linux 和 macOS 操作系统
  • 状态管理:支持沙箱状态持久化和恢复

项目架构

核心代码结构
sandbox/
├── plugin.go            # 插件入口,注册 sandbox 模块到 gojs 框架
├── sandbox.go           # 定义沙箱的核心结构和配置
├── master.go            # 管理沙箱的生命周期和状态
├── runtime.go           # 运行时管理
├── sandbox_linux.go     # Linux 平台实现
├── sandbox_darwin.go    # macOS 平台实现
├── pythonRuntime.go     # Python 运行时实现
├── nodejsRuntime.go     # Node.js 运行时实现
├── util.go              # 工具函数
├── base_test.js         # 测试入口文件
├── testcase/            # 测试用例目录
│   ├── base_allow.py    # 允许模式测试
│   ├── base_deny.py     # 拒绝模式测试
│   ├── secret.py        # 敏感信息测试
│   └── base_allow.js    # Node.js 环境测试
└── README.md            # 项目说明文档
核心组件
  1. Plugin 模块:

    • 注册 sandbox 模块到 gojs 框架
    • 提供 Start、Fetch、Query 等 API 接口
    • 管理沙箱的启动和恢复
  2. Sandbox 核心:

    • 定义沙箱的配置结构(Config)
    • 管理沙箱的状态和生命周期
    • 提供资源限制和网络控制功能
  3. 运行时管理:

    • 支持 Python 和 Node.js 运行时
    • 处理不同运行时的启动和配置
  4. 平台适配:

    • Linux 平台实现(sandbox_linux.go)
    • macOS 平台实现(sandbox_darwin.go)

技术实现

沙箱隔离机制
  • 文件系统隔离:使用挂载点和只读挂载
  • 网络隔离:通过 namespace 机制控制网络访问