我们有一个 Java IRC 应用程序,允许用户执行任意 PHP 并获得结果。以下是其用途的一个示例:
btc: <php>$btc = json_decode(file_get_contents('https://btc-e.com/api/2/1/ticker'), true); $ticker = $btc['ticker']; echo "Current BTC Ticker: High: $".$ticker['high']." Low: $".$ticker['low']." Average: $" . $ticker['avg'];
我们也有一个 python 设置,但我们喜欢 PHP,因为 PHP 在任何地方的代码中都不需要换行符。(因为这是 IRC,我们不能给它换行,除非我们执行一个 web 加载的 .py 文件)
问题是如何防止人们试图利用该系统,例如:
<php>echo readfile("/etc/passwd");
很明显,它会读出 passwd 文件供所有人查看。
在我们尝试阻止 readfile() 之后,我们也遇到了这个问题:
<php>$rf = readfile; echo $rf("/etc/passwd");
我们应该如何保护这个系统?(完整代码在 github 上,有兴趣的可以访问:https ://github.com/clone1018/Shocky )
顺便说一句,没有真正的敏感信息被暴露,因为整个事情都在虚拟机中,所以它不是“定时炸弹”或任何东西。不过,我们仍然想锁定它。