防止应用程序在服务器端引入有害更改

时间:2010-12-21 17:06:49

标签: php linux security sandbox

这只是我在PHP中的小小爱好项目。我使用0sites.org Server(Linux OS)。我基本上试图模仿http://www.codepad.orghttp://www.ideone.com的功能。我正在尝试为某些语言设置一个在线编译器/解释器。

截至目前,我可以使用PHP exec(..)编译/运行应用程序,但我真的不确定如何过滤掉有害的函数调用,如C / C ++ system(..)。另外,我不知道如何阻止任何网络访问。

我还计划添加更多语言。实现特定于每种语言的东西是很困难的。我想知道是否有一种方法可以阻止事情处于更一般的水平。

我已经考虑过手动解析代码并注释掉有问题的代码行。但由于通常有不止一种方法可以做,所以可以打破这种方法。 :-P

任何想法/建议/指针?我将非常感激同样的。 : - )

(PS:这只是一个爱好项目。我只想让它尽可能专业..)

2 个答案:

答案 0 :(得分:2)

您可能真的需要操作系统支持来创建这些沙箱。任何涉及过滤源代码的方法都会遇到安全问题,并且将成为维护的噩梦。

试想一下:即使你完全正确地实现了你的解析器,PHP的解析器中也可能存在一个错误,所以它的解析方式略有不同。这可以很容易地允许某人运行系统,执行等,并完全绕过你的过滤。

你没有偶然发现一个爱好项目;你偶然发现了一个研究项目。

编辑1

在没有操作系统支持的情况下,我能想到的最好的方法是修补PHP(但是你要在C中工作,而不是PHP),或者在PHP中重新实现PHP。但请记住这是多么疯狂。你确定你知道无数的图书馆可能会做什么,特别是当给出有趣的论点时?例如,您可能希望禁止写入文件,但允许使用MySQL。除了MySQL有SQL命令写入任意文件。

http://codepad.org/about表示已完成操作系统支持。也许你可以让自己成为PHP的ptrace模块,并以类似的方式实现你的模块。

答案 1 :(得分:1)

建议是确保将运行这些脚本的用户除了运行它的文件夹之外不能读/写任何内容。此外,应用程序本身不应该由该用户写入。