zoukankan      html  css  js  c++  java
  • PHP和PHPINFO

    PHP开放源码和跨越平台,PHP可以运行在WINDOWS和多种版本的LINUX上。它不需要任何预先处理而快速反馈结果,它也不需要mod_perl的调整来使您的服务器的内存映象减小。PHP消耗的资源较少,当PHP作为ApacheWeb服务器一部分时,运行代码不需要调用外部二进制程序,服务器不需要承担任何额外的负担。


    关于PHP $_SERVER的一些使用方式

    $_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言 
    $_SERVER['REMOTE_ADDR'] //当前用户 IP 。 
    $_SERVER['REMOTE_HOST'] //当前用户主机名 
    $_SERVER['REQUEST_URI'] //URL
    
    $_SERVER['REMOTE_PORT'] //端口。 
    $_SERVER['SERVER_NAME'] //服务器主机的名称。 
    $_SERVER['PHP_SELF']//正在执行脚本的文件名 
    $_SERVER['argv'] //传递给该脚本的参数。 
    $_SERVER['argc'] //传递给程序的命令行参数的个数。 
    $_SERVER['GATEWAY_INTERFACE']//CGI 规范的版本。 
    $_SERVER['SERVER_SOFTWARE'] //服务器标识的字串 
    $_SERVER['SERVER_PROTOCOL'] //请求页面时通信协议的名称和版本 
    $_SERVER['REQUEST_METHOD']//访问页面时的请求方法 
    $_SERVER['QUERY_STRING'] //查询(query)的字符串。 
    $_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录 
    $_SERVER['HTTP_ACCEPT'] //当前请求的 Accept: 头部的内容。 
    $_SERVER['HTTP_ACCEPT_CHARSET'] //当前请求的 Accept-Charset: 头部的内容。 
    $_SERVER['HTTP_ACCEPT_ENCODING'] //当前请求的 Accept-Encoding: 头部的内容 
    $_SERVER['HTTP_CONNECTION'] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。 
    $_SERVER['HTTP_HOST'] //当前请求的 Host: 头部的内容。 
    $_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址。 
    $_SERVER['HTTP_USER_AGENT'] //当前请求的 User_Agent: 头部的内容。 
    $_SERVER['HTTPS']//如果通过https访问,则被设为一个非空的值(on),否则返回off 
    $_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。 
    $_SERVER['SERVER_ADMIN'] #管理员信息 
    $_SERVER['SERVER_PORT'] #服务器所使用的端口 
    $_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。 
    $_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。 
    $_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。 
    $_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。 
    $_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。 
    $_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型
    

    • 举个两小例子
      两种PHP获取服务器端IP地址的方法
    if('/'==DIRECTORY_SEPARATOR){
       $server_ip=$_SERVER['SERVER_ADDR'];
    }else{
       $server_ip=@gethostbyname($_SERVER['SERVER_NAME']);
    }
    echo $server_ip;
    
    /**
    * 获取服务器端IP地址
    * @return string
    */
    
    function get_server_ip(){
       if(isset($_SERVER)){
           if($_SERVER['SERVER_ADDR']){
               $server_ip=$_SERVER['SERVER_ADDR'];
           }else{
               $server_ip=$_SERVER['LOCAL_ADDR'];
           }
       }else{
           $server_ip = getenv('SERVER_ADDR');
       }
       return $server_ip;
    }
    
    echo get_server_ip();
    

    为什么要使用phpinfo呢?

    这一部分非常非常重要

    • PHP中提供了PHPInfo()函数,该函数返回 PHP 的所有信息,包括了 PHP 的编译选项及扩充配置、PHP 版本、服务器信息及环境变量、PHP 环境变量、操作系统版本信息、路径及环境变量配置、HTTP 标头、及版权宣告等信息。

    • PHPInfo()函数主要用于网站建设过程中测试搭建的PHP环境是否正确,很多网站在测试完毕后并没有及时删除,因此当访问这些测试页面时,会输出服务器的关键信息,这些信息的泄露将导致服务器被渗透的风险

    下面我们重点学习一下:

    (1)语法:int phpinfo(void);
    他的返回值是一个整数
    (2)使用方式:列如新建一个.php文件vi test.php
    输入:<?php phpinfo(); ?>

    来看一下泄漏了哪些比较敏感的信息。
    1.++绝对路径(_SERVER[“script_FILENAME”])++
    找到phpinfo()页面可以直接找到网站的绝对路径,对于写shell和信息搜集是必不可少的。
    ep1:(PHP $_SERVER['SCRIPT_FILENAME'] 与 FILE)

    <?php
    echo 'SCRIPT_FILENAME 为:',$_SERVER['SCRIPT_FILENAME'];
    echo '<br />';
    echo '__FILE__ 为:',__FILE__;
    ?>
    

    上述测试代码拷贝至 test.php 并访问该文件(http://localhost/test.php),得到如下结果:

    SCRIPT_FILENAME 为:E:/web/html/php/test.php
    __FILE__ 为:E:webhtmlphp	est.php 
    

    2.++支持的程序++
    可以通过phpinfo()查看一些特殊的程序服务,在没有思路的情况下,可以着重找一下ssrf

    3.++泄漏真实ip(_SERVER[“SERVER_ADDR”]或SERVER_ADDR)++

    4.++泄漏缓存文件地址(_FILES[“file1”])++
    向phpinfo() post一个shell可以在_FILES[“file1”]中看到上传的临时文件,如果有个lfi,便可以直接getshell了。

    5.++一些敏感配置++
    allow_url_include、allow_url_fopen、disable_functions、open_basedir、short_open_tag等等。
    比如allow_url_include可用来远程文件包含、disable_functions用来查看禁用函数,绕过执行、查看是否开启open_basedir,用p牛的绕过open_basedir的方法有可能能读一些没权限的目录等等。

    我们简单用图片说明一下

    1. 我们可以看到PHP的版本

    2. 加载的php.ini文件,我们是可以看到该文件的路径的

    3. 还有就是php的zend(一般用于加密/提高性能)的版本和zend optimizers(一个为加速php脚本的执行,第二为给用zend加密的文件解密)的版本
      PS:如果php的脚本没有经过加密,那么zend optimizer可以不用安装!

      论坛文件目录中的api里面的一些文件是经过加密的,
      supesite( SupeSite可以实现对站内的论坛(Discuz!)、个人空间(X-Space)信息进行内容聚合。任何站长,都可以通过SupeSite,轻松构建一个面向Web2.0的社区门户。)的主程序的文件也是经过加密的,所以对于论坛来说,如果你想使用支付宝,奇虎搜索什么的,就必须安装zend optimizers,如果你想要安装supesite,必须得安装好zend optimizer!

      关于zend optimizer的加速功能,一般可以让php的执行速度提高到30%左右!
      所以如果是独立主机用户,最好是将zend optimizer安装上,这样不仅可以起到加速的作用,而且可以使你的空间完全
      支持论坛和supesite!

    PS:
    简单介绍一下安装过程

    下载安装包后,直接双击安装即可,安装过程要你选择 Web Server 时,选择 Apache 2.x ,然后提示你是否 Restart Web Server,选择是,完成安装之前提示是否备份 php.ini ,点确定后安装完成。

    Zend Optimizer 的加密作用

    我们自己写一个php文件,里面就1行代码
    <?php phpinfo(); ?>
    把它保存为phpinfo.php,上传到服务器上,然后访问这个 PHP 文件。
    如果看到里面有 Zend Optimizer 的版本信息。就说明服务器上支持 Zend Optimizer。版本信息一般是这样的:
    with Zend Optimizer v版本号, Copyright (c) 1998-2007, by Zend Technologies
    只要包含有 with Zend Optimizer,说明服务器支持 Zend Optimizer

    1. 上面指出zend的内核版本,下面指出zend optimizers版本,要使用我们的SupeSite产品,必须还得安装后者。当然zend optimizers安装时候,在页面里还有专门有一个zend optimizers模块,见图5

    2. 加载的模块
      phpinfo会列出你的系统的php加载了哪些模块,然后下面介绍几个比较重要的模块,第一个是gd库模块,很多用户不知道他的空间或者系统是否支持gd库,所以不确定是否可以用水印和缩略图功能,在phpinfo页面,同样可以展示gd库的信息,包括版本,freetype库,gif支持,jpg支持,png支持等等,这些都是很有用的信息,比如支持水印图片为gif的,那你的gd库就有得gig支持。如图所示:

    3. mysql模块
      第二个重要的就是mysql模块。很多用户认为只要成功安装mysql,他就可以安装Discuz!论坛了,其实这
      是一个误区,因为你没有确认你的php是否加载上了mysql支持。phpinfo就可以很好的检验到。如果你的
      phpinfo页面没有列出mysql模块扩展,那说明你的环境没有配置好

    4. 扩展模块
      php的其他扩展模块吧,比如mbstring,是支持宽字符集;ftp,这是支持Discuz!论坛后台的ftp附件,还有就是socket,这个是有些安装了supesite播客的用户支持影音上传的;ming,是支持Discuz!后台的Flash 验证码的。

    phpinfo实在是一个很好的检验php环境的工具,大家如果遇到问题,不妨按照我们上面的,看看是不是哪些模块没加载上,如果访问phpinfo页面的时候变成了下载,那是你的php本身就没安好

  • 相关阅读:
    为什么new的普通数组用delete 和 delete[]都能正确释放
    虚幻4属性系统(反射)
    CFileDialog类的默认路径
    把单一元素的数组放在一个struct的尾端
    在UE4中使用SVN作为source control工具
    单精度浮点数和有效位数为什么是7位
    Valid Number--LeetCode
    归并排序
    堆排序
    直接选择排序
  • 原文地址:https://www.cnblogs.com/fcgfcgfcg/p/9234978.html
Copyright © 2011-2022 走看看