实际上我发现我可以通过 php 中的 exec 访问根目录,例如
<?php
echo exec('cat /etc/passwd');
?>
将打印 passwd 文件的内容,请注意,使用cd
命令我可以轻松导航到我想要的任何地方,那么我该如何纠正这个问题?定义一种虚拟根目录,例如限制在实际目录中
谢谢 !
答案1
默认情况下,该文件cat /etc/passwd
对所有用户都是只读的。该文件不包含关键信息。用户(无论是 www-data/apache 还是其他任何人)能够浏览文件系统是正常行为。但是,某些文件仅限于超级用户(root)以外的所有用户访问。例如,如果 Apache 下的任何进程都可以访问,则会/etc/shadow
出现严重的权限问题,因为该文件包含所有用户的加密密码。
现在,如果您不希望 PHP 能够访问文件系统,有多种方法可以抵消这种行为。还要注意,这种行为本身并不是一种安全风险,因为文件权限控制谁和什么可以修改或查看文件/目录。
- PHP 之前5.4.0有一种称为安全模式的东西可以用来限制用户访问。(它存在许多问题,因此后来被删除)。
- 您可以禁止所有 shell 命令 (system、exec、passthru)。
- 使用open_basedir