前言:php提供了安全模式运行php脚本,但开启了安全模式以后会导致很多php程序运行异常。所以只能在正常环境中运行,但问题又出来了……怎么解决安全问题?

先来了解一下这些东西有什么作用!

phpinfo()
功能描述:输出 PHP 环境信息,已经编译过的模块、服务器运行架构等。
幽静认为php的这个功能能够非常方便的查找某些文件,例如mysql的sock文件位置,但也暴露了服务器的很多敏感信息。有些坏蛋可能会利用这些漏洞来攻击你的服务器!

passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()的函数,非常的危险,一般情况下最好不要使用这类的命令,除了必要之外!

exec()
功能描述:允许执行一个外部程序,可以直接运行shell命令,sh文件,调用系统程序(以root身份执行httpd可以执行root权限的所有命令。包括rm -rf /*)

system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru(),类似于上面的exec,但是这个函数可以接受标准输出。

chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。

scandir()
功能描述:列出指定路径中的文件和目录。(但是部分软件又必须使用这条命令,例如wordpress,由于一般情况威胁不大,所以可以开启)

chgrp()
功能描述:改变文件或目录所属的用户组。

chown()
功能描述:改变文件或目录的所有者。

shell_exec()
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。

proc_open()
功能描述:执行一个命令并打开文件指针用于读取以及写入。

proc_get_status()
功能描述:获取使用 proc_open() 所打开进程的信息。

error_log()
功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,
执行任意命令。

ini_alter()
功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
具体参见 ini_set()。

ini_set()
功能描述:可用于修改、设置 PHP 环境配置参数。非常之危险。

ini_restore()
功能描述:可用于恢复 PHP 环境配置参数到其初始值。(这个幽静基本上忽略了,但是非常危险。因为幽静网站环境的特殊性质,对于php没有任何权限修改)

dl()
功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。

pfsockopen()
功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。

syslog()
功能描述:可调用 UNIX 系统的系统层 syslog() 函数。

readlink()
功能描述:返回符号连接指向的目标文件内容。

symlink()
功能描述:在 UNIX 系统中建立一个符号链接。

popen()
功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。

stream_socket_server()
功能描述:建立一个 Internet 或 UNIX 服务器连接。

putenv()
功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。


解决办法呢?
禁用方法如下:
打开/etc/php.ini文件,
查找到 disable_functions ,添加需禁用的函数名,如下:
第一种:
phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen
第二种:
system,exec,shell_exec,passthru,proc_open,proc_close, proc_get_status,checkdnsrr,getmxrr,getservbyname,getservbyport, syslog,popen,show_source,highlight_file,dl,socket_listen,socket_create,socket_bind,socket_accept, socket_connect, stream_socket_server, stream_socket_accept,stream_socket_client,ftp_connect, ftp_login,ftp_pasv,ftp_get,sys_getloadavg,disk_total_space, disk_free_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_unamel

第三种:
passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server

最后修改日期:2014年12月19日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。