disable_functions =
在后面那里加上要禁用的函数,如禁用多个函数,要用半角逗号 , 分开
给个例子:
disable_functions = passthru,exec,system,popen,chroot,scandir,chgrp,chown,escapesh
ellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status
建议在主机上禁用的函数:
disable_functions = 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_uname
在主机上面如何查看禁用的函数列表,我从网上找了一个非常不错的探针
-
- header("content-Type: text/html; charset=utf-8");
- header("Cache-Control: no-cache, must-revalidate");
- header("Pragma: no-cache");
- error_reporting(0);
- ob_end_flush();
-
- ?>
- "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- "http://www.w3.org/1999/xhtml">
-
- "Pragma" content="No-cache" />
- "Expires" content="0" />
- "cache-control" content="private" />
- "Content-Type" content="text/html; charset=utf-8" />
- PHP 探针 v1.0
-
-
-
-
-
"overview"
>
- ';
-
- if (empty($_GET['typ'])){
- baseinfo();}
- else{
- switch ($_GET['typ']){
- case 'phpinfo':
- phpinfoview();
- break;
- case 'superinfo':
- superinfo();
- break;
- case 'baseinfo':
- baseinfo();
- break;
- default:
- baseinfo();}
- }
-
- function getime()
- {
- $t = gettimeofday();
- return (float)($t['sec'] + $t['usec']/1000000);
- }
-
-
- function baseinfo(){
- echo '
基本信息
';
- $arr[]=array("Current PHP version:",phpversion());
- $arr[]=array("Zend engine version:",zend_version());
- $arr[]=array("服务器版本",$_SERVER['SERVER_SOFTWARE']);
- $arr[]=array("ip地址",$_SERVER['REMOTE_HOST']);
- $arr[]=array("域名",$_SERVER['HTTP_HOST']);
- $arr[]=array("协议端口",$_SERVER['SERVER_PROTOCOL'].' '.$_SERVER['SERVER_PORT']);
- $arr[]=array("站点根目录",$_SERVER['PATH_TRANSLATED']);
- $arr[]=array("服务器时间",date('Y年m月d日,H:i:s,D'));
- $arr[]=array("当前用户",get_current_user());
- $arr[]=array("操作系统",php_uname('s').php_uname('r').php_uname('v'));
- $arr[]=array("include_path",ini_get('include_path'));
- $arr[]=array("Server API",php_sapi_name());
-
- $arr[]=array("error_reporting level",ini_get("display_errors"));
- $arr[]=array("POST提交限制",ini_get('post_max_size'));
- $arr[]=array("upload_max_filesize",ini_get('upload_max_filesize'));
- $arr[]=array("脚本超时时间",ini_get('max_execution_time').'秒');
-
- if (ini_get("safe_mode")==0){
- $arr[]=array("PHP安全模式(Safe_mode)",'off');}
- else{
- $arr[]=array("PHP安全模式(Safe_mode)",'on');}
-
- if (function_exists('memory_get_usage')){
- $arr[]=array("memory_get_usage",ini_get('memory_get_usage'));}
-
-
- echo'
';
- for($i=0;$i<count($arr);$i++)
- {
- $overview='
'.$arr[$i][0].' | '.$arr[$i][1].' |
';
- echo $overview;
- }
- echo'
';
- echo '
服务器性能测试
';
- echo'
服务器 | 整数运算 50万次加法(1+1) | 浮点运算 50万次平方根(3.14开方) |
';
- echo'
MKDuse的机子(P4 1.5G 256DDR winxp sp2) | 465.08ms | 466.66ms |
';
- $time_start=getime();
- for($i=0;$i<=500000;$i++);
- {$count=1+1;}
- $timea=round((getime()-$time_start)*1000,2);
- echo '
当前服务器 | '.$timea.'ms | ';
-
- $time_start=getime();
- for($i=0;$i<=500000;$i++);
- {sqrt(3.14);}
- $timea=round((getime()-$time_start)*1000,2);
- echo '
'.$timea.'ms |
';
-
-
- ?>
-
-
- echo '
带宽测试
';
- for ($i=0;$i<100;$i++){
- print "";}
-
- ?>
-
"dk"
>
-
-
-
-
- echo'
已加载的扩展库(enable)
';
- $arr =get_loaded_extensions();
- foreach($arr as $value){
- echo $value.'
';}
-
- echo'
禁用的函数
'
;
- $disfun=ini_get('disable_functions');
- if (empty($disfun)){
- echo'没有禁用';}
- else{
- echo ini_get('disable_functions').'';}
-
- }
-
-
-
- function superinfo(){
- echo'
高级信息
PHP_INI_USER 1 配置选项可用在用户的 PHP 脚本或Windows 注册表中
PHP_INI_PERDIR 2 配置选项可在 php.ini, .htaccess 或 httpd.conf 中设置
PHP_INI_SYSTEM 4 配置选项可在 php.ini or httpd.conf 中设置
PHP_INI_ALL 7 配置选项可在各处设置
';
-
- $arr1=ini_get_all();
- for ($i=0;$i<count($arr1);$i++)
- {
- $arr2=array_slice($arr1,$i,1);
- print_r($arr2);
- echo '
';
- }
-
- }
-
- function phpinfoview(){
- phpinfo();
- }
- ?>
-
-
-
phpinfo()
功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。
危险等级:中
passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()。
危险等级:高
exec()
功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。
危险等级:高
system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。
危险等级:高
chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。
危险等级:高
scandir()
功能描述:列出指定路径中的文件和目录。
危险等级:中
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 环境配置参数到其初始值。
危险等级:高
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