功能限制

86 阅读4分钟

先给大家看一下黑客的各种攻击手段:

01 文件系统限制

PHP 可以直接访问本地服务器路径以及在服务器上执行脚本文件,因此我们需要用到最小化原则,合理地限制 PHP 的访问范围,可以有效地制止恶意用户对服务器的攻击。

php.ini 中的参数 open_basedir 可以决定 PHP 能够访问文件系统的位置,默认是不开启该参数的,因此PHP就有权力获取整个服务器中的所有文件,当开启该参数后,就可以限制PHP的允许访问目录。

开启 open_basedir 可以有效地对抗文件包含、目录遍历等攻击,防止攻击者访问非授权目录文件,参考:open_basedir = /home/www/

这类知识对于一个上线的服务还是非常重要的,我们要时刻关注到自己提供服务的安全性,来保证服务能够连续、稳定的运行。

02 远程访问限制

在 php.ini 中还有两个参数需要注意 allow_url_fopen 和 allow_url_include。

在开启 allow_url_fopen 配置项后,PHP 仅能够对远程文件进行读写等文件操作。

在开启 allow_url_include 配置项后,PHP 将能够通过 include 等函数将远程文件包含至当前文件并将其作为 PHP 代码进行执行。

文件包含漏洞可以分为LFl(Local File Inclusion本地文件包含)和RFI(Remote File Inclusion,远程文件包含)两种。

而区分二者最简单的办法就是通过查看 php.ini 中是否开启了allow_url_include。如果开启就有可能包含远程文件。

远程文件包含需要 php.ini 中allow_url_include = On, allow_url_fopen = On。

在 php.ini 中,allow_url_fopen 默认一直是On,而 allow_url_include 从 PHP5.2 之后就默认为Off。

在一些第三方服务中,可能会用到 file_get_contents(),因此 allow_url_fopen 通常来说都是设置为On。研发人员只需要谨慎使用 file_get_contents() 函数即可。 例如:支付宝的SDK中就会用到该函数,来提取根证书序列号。

03 禁用危险函数

在PHP中还有很多危险的内置功能函数,如果使用不当,可能会造成系统崩溃。

在 php.ini 中添加禁用函数 disable_functions 可以有效地避免 webshell。

以下是一些建议禁用地函数。

函数名称功能介绍
chgrp改变文件或目录所属地用户组
chown改变文件或目录地所有者
chroot可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式时 PHP 才能工作,且该函数不适用于 Windows 系统
dl在 PHP 运行过程中(而非启动时)加载一个 PHP 外部模块
exec允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)
ini_alter是 ini_set() 函数的一个别名函数,功能与 ini_set()相同
ini_restore可用于将 PHP 环境配置参数恢复为初始值
ini_set可用于修改、设置 PHP 环境配置参数
passthru允许执行一个外部程序并回显输出,类似于 exec()
pfsockopen建立一个 Internet 或 UNIX 域的 socket 持久连接
phpinfo输出 PHP 环境信息以及相关的模块、Web 环境等信息
popen可通过 popen()的参数传递一条命令,并对popen()所打开的文件进行执行
proc_get_status获取使用 proc_open() 所打开进程的信息
proc_open执行一个命令并打开文件指针用于读取以及写入
putenv用于在PHP运行时改变系统字符集环境。在低于 5.2.6 版本的PHP中,可利用该函数修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 Shell 命令
readlink返回符号连接指向的目标文件内容
scandir列出指定路径中的文件和目录
shell_exec通过Shell 执行命令,并将执行结果作为字符串返回
stream_socket_server建立一个 Internet 或 UNIX 服务器连接
symlink对已有的 target 建立一个名为 link 的符号连接
syslog可调用 UNIX 系统的系统层 syslog() 函数
system允许执行一个外部程序并回显输出,类似于 passthru()

想要了解更多PHP开发的安全问题可以关注我哟,或者加入下面的社群也是ok的,

功能限制 - 乐述云享 (aleshu.com)

【社群】PHP开发(安全问题) - 乐述云享 (aleshu.com)