这只是我在PHP中的小小爱好项目。我使用0sites.org Server(Linux OS)。我基本上试图模仿http://www.codepad.org,http://www.ideone.com的功能。我正在尝试为某些语言设置一个在线编译器/解释器。
截至目前,我可以使用PHP exec(..)
编译/运行应用程序,但我真的不确定如何过滤掉有害的函数调用,如C / C ++ system(..)
。另外,我不知道如何阻止任何网络访问。
我还计划添加更多语言。实现特定于每种语言的东西是很困难的。我想知道是否有一种方法可以阻止事情处于更一般的水平。
我已经考虑过手动解析代码并注释掉有问题的代码行。但由于通常有不止一种方法可以做,所以可以打破这种方法。 :-P
任何想法/建议/指针?我将非常感激同样的。 : - )
(PS:这只是一个爱好项目。我只想让它尽可能专业..)
答案 0 :(得分:2)
您可能真的需要操作系统支持来创建这些沙箱。任何涉及过滤源代码的方法都会遇到安全问题,并且将成为维护的噩梦。
试想一下:即使你完全正确地实现了你的解析器,PHP的解析器中也可能存在一个错误,所以它的解析方式略有不同。这可以很容易地允许某人运行系统,执行等,并完全绕过你的过滤。
你没有偶然发现一个爱好项目;你偶然发现了一个研究项目。
在没有操作系统支持的情况下,我能想到的最好的方法是修补PHP(但是你要在C中工作,而不是PHP),或者在PHP中重新实现PHP。但请记住这是多么疯狂。你确定你知道无数的图书馆可能会做什么,特别是当给出有趣的论点时?例如,您可能希望禁止写入文件,但允许使用MySQL。除了MySQL有SQL命令写入任意文件。
http://codepad.org/about表示已完成操作系统支持。也许你可以让自己成为PHP的ptrace
模块,并以类似的方式实现你的模块。
答案 1 :(得分:1)
建议是确保将运行这些脚本的用户除了运行它的文件夹之外不能读/写任何内容。此外,应用程序本身不应该由该用户写入。