19 · 2026

Secure Code Judge Sandbox

ตัวรันโค้ดแบบ online judge ที่คอมไพล์และรันโค้ดที่ไม่น่าไว้ใจอย่างปลอดภัย จำกัดเวลา/หน่วยความจำ และบล็อก system call อันตรายAn online-judge style runner that compiles and runs untrusted code safely — time/memory limits and dangerous syscalls blocked.

sandbox.c
// process ลูก: จำกัด → กรอง → รันstruct rlimit cpu = { .rlim_cur = 1, .rlim_max = 1 };setrlimit(RLIMIT_CPU, &cpu);seccomp_load(filter); // block socket, ptrace ...execve(path, argv, envp);
19SYSCALLS5

ภาพรวม

Sandbox สำหรับรันโค้ดที่ส่งเข้ามาแบบ online judge โดยใช้ system call ของ Linux โดยตรง

หลักการทำงาน

  1. fork() แยก process ลูกสำหรับโค้ดที่จะรัน
  2. ตั้งขีดจำกัดด้วย setrlimit() (CPU time, memory)
  3. กรอง system call อันตรายด้วย seccomp
  4. execve() รันโปรแกรม และใช้ alarm() / signal กันโปรแกรมค้าง
  5. wait4() เก็บผลลัพธ์ เวลา และหน่วยความจำที่ใช้

มีแผนทำเว็บเดโมที่แสดงแต่ละขั้นตอนด้วยแอนิเมชัน

Overview

A sandbox for running submitted code, online-judge style, built directly on Linux system calls.

How it works

  1. fork() a child process for the submission
  2. Set limits with setrlimit() (CPU time, memory)
  3. Filter dangerous system calls with seccomp
  4. execve() the program, with alarm() / signals to stop runaway code
  5. wait4() to collect the result, time and memory usage

A web demo that animates each step is planned.