PHP和PHPINFO

PHP開放源碼和跨越平臺,PHP能夠運行在WINDOWS和多種版本的LINUX上。它不須要任何預先處理而快速反饋結果,它也不須要mod_perl的調整來使您的服務器的內存映象減少。PHP消耗的資源較少,當PHP做爲ApacheWeb服務器一部分時,運行代碼不須要調用外部二進制程序,服務器不須要承擔任何額外的負擔。php


關於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呢?

這一部分很是很是重要html

  • PHP中提供了PHPInfo()函數,該函數返回 PHP 的全部信息,包括了 PHP 的編譯選項及擴充配置、PHP 版本、服務器信息及環境變量、PHP 環境變量、操做系統版本信息、路徑及環境變量配置、HTTP 標頭、及版權宣告等信息。mysql

  • PHPInfo()函數主要用於網站建設過程當中測試搭建的PHP環境是否正確,不少網站在測試完畢後並無及時刪除,所以當訪問這些測試頁面時,會輸出服務器的關鍵信息,==這些信息的泄露將致使服務器被滲透的風險==web

下面咱們重點學習一下:

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

來看一下泄漏了哪些比較敏感的信息。
1.++絕對路徑(_SERVER[「script_FILENAME」])++
找到phpinfo()頁面能夠直接找到網站的絕對路徑,對於寫shell和信息蒐集是必不可少的。
ep1:(PHP $_SERVER['SCRIPT_FILENAME'] 與 FILE)shell

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

上述測試代碼拷貝至 test.php 並訪問該文件(http://localhost/test.php),獲得以下結果:api

SCRIPT_FILENAME 爲:E:/web/html/php/test.php
__FILE__ 爲:E:\web\html\php\test.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自己就沒安好

相關文章
相關標籤/搜索