虽然我确实知道系统调用和安全性不能齐头并进,但有一个项目我确实需要它。我正在编写一个小型代码检查器,我需要编译和执行用户提交的代码来测试我的测试用例。
基本上我想在沙箱中运行代码,这样它就不能触及临时目录之外的任何文件,并且它创建的任何文件都不能被外界访问。最近我遇到了一个漏洞利用,用户可以利用它创建一个文件,比如shell.php
包含以下内容。
<?php
echo system($_GET['x']);
?>
这给了攻击者一个远程shell,并且由于文件的所有者是apache,攻击者基本上可以在我/var/www
存储mysql密码和其他配置信息的地方移动。
虽然我知道 SQL 注入等威胁,并在涉及数据库的任何操作之前清理了用户输入,但我不知道如何设置沙箱。我可以使用哪些技术来禁用系统调用(现在我正在用户提交的代码中搜索“系统”这个词,而不是在找到它的地方执行那些片段)并限制对用户文件的访问提交的代码创建。
到目前为止,我的代码检查器仅适用于 C,并且我计划在保护它之后添加对 C++、Java、Ruby 和 Python 等其他语言的支持。此外,我想了解更多关于我遇到的这个问题的信息,因此我也可以在其中了解更多关于网络安全的信息。
我的开发机器正在运行 Mac OS Lion,而部署机器是一台 linux 服务器,所以如果一个解决方案是跨平台的,将不胜感激,但只处理 linux 机器的解决方案也可以。