php - 组织编程竞赛 - 如何编译和执行

标签 php c linux compiler-construction

我正在构建一个基于 Web 的界面,人们可以在其中输入简单的 C 代码来解决算法编程问题。我正在使用 Ace 编辑器,人们可以在其中输入代码,当按下运行按钮时,C 代码将发送到服务器,编译后将输出发回。

如何以安全的方式完成第二部分。我的意思是给定一个 C 代码文件,编译并执行它。我不能相信代码,所以我如何确保它不是恶意的并且不会损害我的系统。还有如何施加内存和时间限制。

是否有任何现有的系统开源系统可供我修改以满足我的需要?我在搜索中没有找到任何东西。或者关于我接下来应该如何进行的一些指示?

编辑:发现http://cs.sru.edu/~contest/rocktest/并试图理解他们的代码,但仍在寻找更好的选择,最好是在 php 中

最佳答案

请允许我插入 AppArmor ,一种简单的强制访问控制机制,可以使创建此类沙箱变得简单。这是我用来限制我的配置文件 xpdf PDF 查看器:

#include <tunables/global>

/usr/bin/xpdf {
  #include <abstractions/base>
  #include <abstractions/bash>
  #include <abstractions/X>
  #include <abstractions/fonts>

  /dev/tty rw,
  owner /dev/pts/* rw,
  /etc/papersize r,
  /etc/xpdf/* r,
  /bin/bash ix,
  /usr/bin/xpdf r,
  /usr/bin/xpdf.bin rmix,
  /usr/share/xpdf/** r,
  /usr/share/icons/** r,
  owner /**.pdf r,
  owner /tmp/* rw,
}

您可以在半天左右的时间里学习限制您选择的应用程序的基础知识,再花半天时间就可以为您的服务器编写配置文件。 (那个 xpdf 配置文件花了我大约四分钟的时间来写,但我知道我在做什么。我们在一个下午的时间里在一家领先的在线零售商面向公众的服务器上部署了 AppArmor,类似的其他部署的结果。)

AppArmor 还提供 an easy interface for configuring run-time limits ,比如允许一个进程分配多少内存:

rlimit as <= 100M,  # limit address space to 100 megabytes

AppArmor 最容易在 Ubuntu、openSUSE、SLES、PLD、Mandriva、Pardis 或 Annvix 发行版上使用,因为这些工具已预先安装。但是核心的 AppArmor 功能是现货 Linux 内核 2.6.36 和更新版本,以及 it is possible to install AppArmor on any Linux distribution .

其他类似工具包括 SElinux , TOMOYO , 或 SMACK .我认为 SMACK 将是下一个最容易部署的,但它们中的任何一个都可以防止恶意代码损害您的系统。

关于php - 组织编程竞赛 - 如何编译和执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372939/

相关文章:

php - 在 "Thank you"页面显示订单的发货方式

在c中将图像的一个区域更改为 "color"

c++ - 我在 Visual Studio 2012 Pro 中有一个 C++ DLL 类型的项目,但我无法将其编译为 CLR - 为什么会这样?

linux - Linux read() 是否将数据复制到进程地址空间

php - 如何从MySQL获取没有猫的 friend ?

PHP 提交问题,变量改变?

php - 需要有关Codeigniter gchart帮助用法的帮助

c - C语言从文件中读取字符

c - 在 Linux 中查找进程产生的线程数

c++ - 如何以类似于 C 函数的方式将 dlsym 映射到非静态 C++ 成员函数?