我们有一个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'];
Run Code Online (Sandbox Code Playgroud)
我们也有一个python设置,但是我们喜欢PHP,因为PHP在任何地方都不需要代码中的换行符.(因为这是IRC,我们不能给它换行,除非我们执行一个web加载的.py文件)
问题是如何防止人们试图利用系统,例如:
<php>echo readfile("/etc/passwd");
Run Code Online (Sandbox Code Playgroud)
显然,这将读出所有人看到的passwd文件.
在我们尝试阻止readfile()之后,我们也遇到了这个问题:
<php>$rf = readfile; echo $rf("/etc/passwd");
Run Code Online (Sandbox Code Playgroud)
我们该如何保护这个系统?(完整代码在github上,对于任何感兴趣的人:https://github.com/clone1018/Shocky)
顺便说一句,没有真正的敏感信息被曝光,因为整个事情都在VM中,因此它不是"定时炸弹"或任何东西.我们仍然想把它锁定.
这听起来就像堵漏勺上的一个洞。文件系统安全性应由操作系统而不是应用程序来处理。就目前而言/etc/passwd,操作系统已经在保护它了。
这是我的第一行/etc/passwd- 是的,我将公开发布它:
root:x:0:0:root:/root:/bin/bash
Run Code Online (Sandbox Code Playgroud)
通常,密码实际上并不存储在/etc/passwd. 用户信息为,但密码替换为x,真正的密码只有 root 用户可用。
但是,您应该在某种程度上锁定 PHP。您可以在运行时使用 更改许多 PHP 选项ini_set,包括open_basedir. http://www.php.net/manual/en/ini.core.php#ini.open-basedir
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |